├── .gitignore
├── README.md
├── materials
└── PyLadies-CfP-PyConDE_PyDataBer.pdf
├── meetup_script.ipynb
├── organizing
├── assets
│ └── imgs
│ │ ├── 2fa_1.png
│ │ ├── 2fa_2.png
│ │ ├── 2fa_3.png
│ │ └── example_linkedin_volunteering.png
├── faq.md
├── start_here.md
└── sub_pages
│ ├── about_pyladies.md
│ ├── accounts.md
│ ├── coaching.md
│ ├── conference.md
│ ├── facilitating_events.md
│ ├── giving_a_workshop_or_talk.md
│ ├── hosting_and_sponsorship.md
│ ├── resources.md
│ ├── social_media.md
│ ├── speakers_guide.md
│ ├── supporting_pyladies.md
│ └── templates
│ ├── email_templates.md
│ ├── meetup_template.md
│ └── social_media_templates.md
├── questions.md
└── workshops
├── 0_installation_party
├── README.md
└── test_script.py
├── 10_pandas_intro
└── README.md
├── 11_building_a_small_web_app_using_mvc_patterns
├── README.md
└── slides.pdf
├── 12_how_to_write_pythonic_code
├── README.md
└── be_more_pythonic.html
├── 13_fun_games
└── README.md
├── 14_coding_alg_to_win
└── README.md
├── 15_microservices
└── README.md
├── 16_rest_apis
└── README.md
├── 17_blender_solar_system_modelling
└── README.md
├── 18_git_and_github
├── README.md
└── slides.pdf
├── 19_Telegram_Bots
└── readme.txt
├── 1_introduction_to_programming_with_python
└── README.md
├── 20_python_beginners_workshop
├── .gitignore
├── README.md
└── slides
│ ├── InstallationParty.odp
│ ├── InstallationParty.pdf
│ ├── InstallationParty.pptx
│ ├── PythonBeginnersWorkshop.odp
│ ├── PythonBeginnersWorkshop.pdf
│ └── PythonBeginnersWorkshop.pptx
├── 21_Micro_Python_IoT_Workshop
├── IoT_workshop_pyladiesBerlin.pdf
├── PARTI
│ ├── 0_script.rst
│ ├── 1_intro.rst
│ ├── 2_reset.rst
│ ├── 3_repl.rst
│ ├── 4_leds.rst
│ ├── 5_switch.rst
│ ├── 6_accel.rst
│ ├── 7_timer.rst
│ ├── 8_usb_mouse.rst
│ └── 9_debounce.rst
├── PARTII
│ ├── 1_servo.rst
│ ├── 2_fading_led.rst
│ └── 3_lcd160cr_skin.rst
├── PARTIII
│ ├── ESP8266Link.rst
│ ├── HDC1080_test.py
│ ├── HYGROMETER.rst
│ ├── apds9960
│ │ ├── Broadcom-APDS-9960-datasheet.pdf
│ │ └── test_rgbc.py
│ └── datasheets
│ │ ├── MMA7660FC.pdf
│ │ └── hdc1080.pdf
└── img
│ ├── fading_leds_breadboard_fritzing.png
│ ├── image.png
│ ├── pyboard_servo.jpg
│ ├── pyboard_usb_micro.jpg
│ ├── skin_amp_1.jpg
│ ├── skin_amp_2.jpg
│ ├── skin_lcd_1.jpg
│ └── skin_lcd_2.jpg
├── 22_Hardware_hack_evening
├── README.md
├── community-announcements (2).pdf
└── hardware-hackevening.png
├── 23_Data_Wrangling_Pandas
├── Pandas.odp
├── README.md
└── Template.odp
├── 24_scikit-learn_fairlearn_sprint
└── 2025_Feb_scikit-learn_fairlearn_sprint.pdf
├── 2_understanding_the_web_basics
├── README.md
└── slides.pdf
├── 3_introduction_to_django
└── README.md
├── 4_introduction_to_git
├── README.md
└── slides.pdf
├── 5_python_basics_variables_functions_files_for_beginners
└── README.md
├── 6_data_visualization_with_django_and_highcharts
└── README.md
├── 7_workshop_web_scraping
└── README.md
├── 8_python_in_science
├── README.md
└── slides.pdf
└── 9_test_driven_development
├── README.md
└── slides.pdf
/.gitignore:
--------------------------------------------------------------------------------
1 | *~
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 📚 PyLadies Resources 🤓
2 |
3 | Here is a selection of useful resources as well as slides, exercises and materials from our workshops.
4 |
5 | ## :computer: Websites for learning
6 | * [Overview of free STEM classes](https://www.thesimpledollar.com/stem-free-computer-science-classes/)
7 | * [Code Academy ~ Python track](https://www.codecademy.com/catalog/language/python) *(beginner friendly)*
8 | * [Automate the boring stuff](https://automatetheboringstuff.com/) *(beginner friendly)*
9 | * [PyBites](https://pybit.es/pages//challenges.html) *(train your skills)*
10 | * [CodeWars](https://www.codewars.com/dashboard) *(train your skills)*
11 |
12 | ## 👩💻 / 👨💻 Workshops/Tutorials
13 | ### Beginners
14 | #### Learn Python
15 | * (Book) Online Free Book Python 3, learn from scratch step by step - https://python.swaroopch.com/first_steps.html
16 | * (Tutorial) Learn basic python with drawing with turtle python module - http://opentechschool.github.io/python-beginners/
17 | * (Learning options index) Up to date list of learning resources - https://python-guide.readthedocs.io/en/latest/intro/learning/
18 |
19 | #### Practice Python
20 | * Build a text adventure - Exercises with solutions (practice if, else, for logic) https://github.com/PyLadiesBerlin/python-beginners-workshop/blob/master/tasks/README.rst
21 | * Practice pythonic code with solutions in small exercises (git used to submit exercises) https://exercism.io/
22 |
23 | ### Git
24 | * Git tutorial (good to know first a bit what git is) - https://www.codecademy.com/learn/learn-git
25 | * Command line tutorial - https://www.codecademy.com/learn/learn-the-command-line
26 |
27 | ### Intermediate/Advanced
28 |
29 | ### Python core
30 | * Python intermediate advanced/concepts - http://book.pythontips.com/en/latest/index.html
31 |
32 | ### Web related
33 | - Flask - http://opentechschool.github.io/python-flask/
34 | - Django - https://tutorial.djangogirls.org/en/
35 | - Fastapi, new async web framework - suitable for experienced web developers - https://fastapi.tiangolo.com/tutorial
36 |
37 | ### Data related
38 | - First experience with data, jupyter, csv etc. tutorial - http://opentechschool.github.io/python-data-intro/
39 | - Very brief numpy and pandas basics tutorial - https://www.learnpython.org/
40 | - Pandas dataframe detailed tutorial (with video) https://www.datacamp.com/community/tutorials/pandas-tutorial-dataframe-python
41 |
42 | More deep data resources (opentechschool - [datascience learning recommendations] (https://github.com/ellenkoenig/datascience-co-learning#python))
43 | - Pandas complete tutorial - https://bitbucket.org/hrojas/learn-pandas
44 | - StatsModels Tutorial - https://github.com/jseabold/statsmodels-tutorial
45 |
46 | Transfer learning for computer vision - [https://github.com/ividal/TransferLearning/blob/master/README.md](https://github.com/ividal/TransferLearning/blob/master/README.md)
47 |
48 | ### GUI
49 | - Build pretty GUIs with python - workshop with solutions - https://github.com/cmaureir/qtforpython_workshop
50 |
51 | ### Other topics / Challenges
52 | - http://automatetheboringstuff.com/#toc
53 | - https://pybit.es/pages//challenges.html
54 | - Concurrent Futures workshop (Parallel programming in Python) [https://github.com/teoguso/concurrent-futures-tutorial](https://github.com/teoguso/concurrent-futures-tutorial)
55 |
56 | ## Books
57 | - [Dive Into Python 3](https://diveintopython3.problemsolving.io/)
58 | - [Think python 2e](https://greenteapress.com/wp/think-python-2e/)
59 | - [Python Practice Book](https://anandology.com/python-practice-book/index.html)
60 |
61 | ## 👩💻Other Berlin based Meetups
62 | - [Open Tech School Python Co-Learning](https://www.meetup.com/opentechschool-berlin/) *(beginner friendly, python for web aps)*
63 | - [Open Tech School Data Science Co-Learning](https://www.meetup.com/opentechschool-berlin/) *(beginner friendly, python for data science)*
64 | - [Heart of Code](http://heartofcode.org/) *(beginner friendly)*
65 | - [PyData Berlin](https://www.meetup.com/PyData-Berlin/)
66 | - [Coders Club](https://www.facebook.com/groups/1968788209862149/?multi_permalinks=2151482021592766¬if_id=1535578255867282¬if_t=group_activity) *(weekly co-learning)*
67 | - [Django Girls Berlin](https://djangogirls.org/berlin/) *(yearly workshops)*
68 | - [Open Source diversity](https://opensourcediversity.org/#) *(Get started with contributing to Open Source projects)*
69 |
70 | ## 👩💻 Initiatives to teach IT skills to women (distance learning)
71 | - Learn IT, Girl! (https://www.learnitgirl.com) *(mentoring scheme over 12 weeks, beginner friendly, requires an application)*
72 | - Python Study Group organized by the Anita B.Org community (https://anitab.org) *(beginner friendly, requires an application, follows this (free) Python course https://www.udemy.com/share/101r6uAkAedVpURHg=/)*
73 |
74 | ## Open source Projects to get involved with
75 | - [Numfocus](https://github.com/numfocus)
76 | - [Scipy](https://scipy.org/)
77 | - [Like to hear](https://github.com/liketohear/liketohear)
78 |
79 | You can also find more projects on the [open source diversity forum](https://discourse.opensourcediversity.org/c/projects/7)
80 |
81 | ## Past workshops
82 |
83 | ### 💾 Slides, exercises and materials
84 |
85 | 0. [Getting started - setting up your machine](./workshops/0_installation_party)
86 | 1. [Introduction to programming with python](./workshops/1_introduction_to_programming_with_python)
87 | 2. [Understanding the web basics](./workshops/2_understanding_the_web_basics)
88 | 3. [Introduction to Django](./workshops/3_introduction_to_django)
89 | 4. [Introduction to git](./workshops/4_introduction_to_git)
90 | 5. [Python basics variables functions files for beginners](./workshops/5_python_basics_variables_functions_files_for_beginners)
91 | 6. [Data visualization with django and highcharts](./workshops/6_data_visualization_with_django_and_highcharts)
92 | 7. [Workshop web scraping](./workshops/7_workshop_web_scraping)
93 | 8. [Python in science](./workshops/8_python_in_science)
94 | 9. [Test driven development](./workshops/9_test_driven_development)
95 | 10. [Pandas intro](./workshops/10_pandas_intro)
96 | 11. [Building a small web app using mvc patterns](./workshops/11_building_a_small_web_app_using_mvc_patterns)
97 | 12. [How to write pythonic code](./workshops/12_how_to_write_pythonic_code)
98 | 13. [Fun games](./workshops/13_fun_games)
99 | 14. [Coding alg to win](./workshops/14_coding_alg_to_win)
100 | 15. [Microservices](./workshops/15_microservices)
101 | 16. [Rest apis](./workshops/16_rest_apis)
102 | 17. [Blender solar system modellingn](./workshops/17_blender_solar_system_modelling)
103 | 18. [Git and github](./workshops/18_git_and_github)
104 | 19. [Telegram Bots](./workshops/19_Telegram_Bots)
105 | 20. [Python beginners workshop](./workshops/20_python_beginners_workshop)
106 | 21. [MicroPython IoT workshop](./workshops/21_Micro_Python_IoT_Workshop)
107 | 22. [Hardware Hackevening Resources](./workshops/22_Hardware_hack_evening)
108 | 23. [Data Wrangling with Pandas](./workshops/23_Data_Wrangling_Pandas) ([Meetup event](https://www.meetup.com/PyLadies-Berlin/events/262358177/))
109 | 24. [Developers X Operations AKA devops! Docker edition](https://github.com/emilywoods/pyladies-docker-workshop)
110 | (slides included in the repo), ([Meetup event](https://www.meetup.com/PyLadies-Berlin/events/264674547))
111 | 25. [TDD workshop](https://github.com/anapaulagomes/tdd-workshop)
112 | ([Meetup event](https://www.meetup.com/PyLadies-Berlin/events/260832361/))
113 | 26. [Build and Implement a Deep Learning Speech Classifier in Python](https://github.com/a-n-rose/Build-CNN-or-LSTM-or-CNNLSTM-with-speech-features),
114 | ([Meetup event](https://www.meetup.com/PyLadies-Berlin/events/258238053/))
115 | 27. [Getting started with PyMC and Bayesian Modelling](https://github.com/corriebar/PyLadies-Bayesian-Tutorial),
116 | ([Meetup event](https://www.meetup.com/PyLadies-Berlin/events/268066521/))
117 | 28. [Noise filters in Python](https://notebooks.ai/a-n-rose),
118 | Make a free account in https://i.notebooks.ai/i/qrtJj3 to access, ([Meetup event](https://www.meetup.com/PyLadies-Berlin/events/263676106B))
119 | 29. [Building a data science project from scratch](https://github.com/jkokatjuhha/workshop_berlin_rental_apartment), ([Meetup event](https://www.meetup.com/PyLadies-Berlin/events/251789319/)), many nice resource in the requirements
120 | 30. [Web Scraping with Scrapy and MongoDB running on Docker](https://github.com/laufergall/webscraping_workshop)
121 |
122 | ## :microphone: Public speaking - Call for Proposals - CFP
123 | Brilliant talks about public speaking in conferences.
124 |
125 | - [CFP Advice (what to talk about and how)](https://www.youtube.com/watch?v=lHIHgauh000)
126 | - [Crafting your Bio](https://www.youtube.com/watch?v=GPPnvXlVj7w)
127 | - [Your perfect tech talk Prepare a talk to be remembered!!](https://www.youtube.com/watch?v=AzVr_nsKoZs)
128 | - [The art of slide design](https://www.youtube.com/watch?v=e5gwEvQah-s)
129 | - [The day of your talk Checklist of everything to prepare so nothing can go wrong.](https://www.youtube.com/watch?v=m2j6-pjfvuo)
130 |
131 | Find some slides with great tips from our own CFP writing event [here](./materials/PyLadies-CfP-PyConDE_PyDataBer.pdf)
132 |
133 | ## Coaching
134 |
135 | If you wanna join us as a coach, please fill in [this form](https://goo.gl/forms/7XNAb9MhM7EqaZxa2) and we will reach out to
136 | ask you whenever we are in need.
137 |
138 | Thanks for your active support :heart:
139 |
140 | ## :clipboard: Organizing resources
141 |
142 | Everything related with Pyladies Berlin chapter [organizing](organizing).
143 |
144 |
145 | ## 🐛 Issues or suggestions
146 |
147 | If you found an issue on the page or only have a quick suggestion (for example a resource to add), please open a new issue in [our issue list](https://github.com/PyLadiesBerlin/resources/issues). Thank you! 👍
148 |
149 |
150 | ### :smiley: :trophy: Adding resources yourself
151 |
152 | - You can clone this repository and add resources (ie workshop material) if you do so :heart_eyes:, please submit a Pull
153 | Request.
154 | - How to create a pull request? This guide will help you get started: [Opening a pull request](https://opensource.guide/how-to-contribute/#opening-a-pull-request) :heart:
155 |
156 |
157 | ## :satellite: Contact us
158 |
159 | You can reach us either through [email](berlinpyladies@gmail.com) or on our [slack](https://pyladies-berlin.slack.com), if your not already a member you can an invite [here](https://pyladies-berlin.herokuapp.com/).
160 |
161 |
162 | ## :v: Code of conduct
163 |
164 | The PyLadies community has a code of conduct that are shared between all our members and apply at our Meetups as well as on our online platforms, please respect [our shared values](http://www.pyladies.com/CodeOfConduct/). :relieved:
165 |
--------------------------------------------------------------------------------
/materials/PyLadies-CfP-PyConDE_PyDataBer.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/materials/PyLadies-CfP-PyConDE_PyDataBer.pdf
--------------------------------------------------------------------------------
/organizing/assets/imgs/2fa_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/organizing/assets/imgs/2fa_1.png
--------------------------------------------------------------------------------
/organizing/assets/imgs/2fa_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/organizing/assets/imgs/2fa_2.png
--------------------------------------------------------------------------------
/organizing/assets/imgs/2fa_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/organizing/assets/imgs/2fa_3.png
--------------------------------------------------------------------------------
/organizing/assets/imgs/example_linkedin_volunteering.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/organizing/assets/imgs/example_linkedin_volunteering.png
--------------------------------------------------------------------------------
/organizing/faq.md:
--------------------------------------------------------------------------------
1 | # FAQ
2 |
3 | ### What do PyLadies Berlin do?
4 | * Monthly meetups with talks and workshops.
5 | * Speaker support program (brainstorming, CFP support, feedback in slides, notes, rehearsh talks)
6 | * New location every time, ideally in companies using Python, so we can learn about what they do with it, in the short intro the host have.
7 | * Full day workshops (beginners, intermediate)
8 | * Setup events (for beginners to get everything setup and talk about what the various tools are for)
9 |
10 | Check also http://berlin.pyladies.com/
11 |
12 | ### How can I support PyLadies?
13 | * Raise awareness in your workplace and community (check [related articles](#newspaper-articles) )
14 | * Offer a location (send us an email)
15 | * Subscribe as a coach in our events (check the pinned tweet in our account)
16 | * Offer location for a full day event (Saturday)
17 |
18 | ### What are the location requirements?
19 | * Evening meetup: 19:00 - 22:00
20 | * Full day event: 10:00 - 18:00
21 | * Space for 40 attendees
22 | * Simple seating or with tables
23 | * Power and Internet for workshops
24 |
25 | ### How can I present something?
26 | Send us an email or write in slack to one of the organizers.
27 |
28 | ### What can I present in the meetup?
29 | Anything python related. Some topics requested from attendees are:
30 | pandas, clean code, psycopg, skit-learn, data visualization, machine learning, speech recognition.
31 |
32 | ### What is the level of the attendees?
33 | Attendees level may vary from total begineer to professionals. We occassionally have events aimed exclusively for beginners. Though we also welcome more advanced topics as long as it is presented considering zero knowledge. So that total begineers can still understand partly.
34 |
35 | ### How can I hire PyLadies?
36 | Check our [email to companies that want to post jobs](email-for-job-advertisers.md)
37 |
38 | ### Where are PyLadies Berlin logos?
39 | [Logos](https://drive.google.com/drive/folders/1dV2Ezol4Ikf3J2a1TtZ8hfrLrhl2rOY5?usp=sharing)
40 |
41 | ### How to contanct you
42 | Email: berlin@pyladies.com
--------------------------------------------------------------------------------
/organizing/start_here.md:
--------------------------------------------------------------------------------
1 | # Supporting PyLadies Berlin
2 |
3 | We heard you want to support our community ❤️ First and foremost thank you! We can not achieve our goal of making the Python community more diverse without folks like you.
4 |
5 | This document is set up in the style of a choose your own adventure, it's purpose is to help you discover how you can support our community, be that by hosting an event, giving a workshop or talk, mentorship, handling sponsorships, everything in between or something completely new. If you prefer a more structured table of contents please see [below](#organizing-resources) or check our [FAQ](faq.md).
6 |
7 | Because all events are unique and so are all organizers we try to cover different ways you can get involved so you can choose what works best for you. We also aim to answer questions we have received frequently to give you an idea of what this involves.
8 |
9 | As this is an evolving document, it is not complete, so if you think something is missing please open an issue on the repository so we can help you and others.
10 |
11 | [> I want to learn more about PyLadies](./sub_pages/about_pyladies.md)
12 | [> I want to learn more about what supporting PyLadies involves](./sub_pages/supporting_pyladies.md#what-you-can-expect)
13 | [> I am looking to support the community but not sure how](./sub_pages/supporting_pyladies.md#ways-you-can-get-involved)
14 | [> I have a workshop or talk idea that I would like to share with the community](./sub_pages/giving_a_workshop_or_talk.md)
15 | [> I would like to host PyLadies](./sub_pages/hosting_and_sponsorship.md#hosting-pyladies)
16 | [> I would like to be a coach or mentor](./sub_pages/coaching.md)
17 | [> I would like to support beyond events ie social media, website, code of conduct etc](./sub_pages/supporting_pyladies.md#other-ways-you-might-support-the-community)
18 | [> I work for a company that would like to host and or sponsor PyLadies](./sub_pages/hosting_and_sponsorship.md)
19 | [> I would like to advertise a job position/s](./sub_pages/hosting_and_sponsorship.md#job-postings)
20 | [> I am organizing another chapter and interested in any resources available to run events](#organizing-resources)
21 |
22 | ---
23 |
24 | ## Organizing Resources
25 |
26 | Alternatively here is a table of contents to find specific resources more quickly.
27 |
28 | ### At a glance
29 | - [Global PyLadies website](https://pyladies.com/)
30 | - [Berlin chapter website](https://berlin.pyladies.com/)
31 | - [meetup (events)](https://www.meetup.com/pyladies-berlin/)
32 | - [slack](https://pyladies.slack.com)
33 | - [FAQ](./faq.md)
34 | - [Code of Conduct](https://www.pyladies.com/CodeOfConduct/)
35 |
36 | ### Event organizing
37 | - [Facilitating an event](./sub_pages/facilitating_events.md)
38 | - Templates
39 | - [Email](./sub_pages/templates/email_templates.md)
40 | - [Meetup](./sub_pages/templates/meetup_template.md)
41 | - [Social Media](./sub_pages/templates/social_media_templates.md)
42 |
43 | ### Sponsorship
44 | - [Hosting PyLadies](./sub_pages/hosting.md#Hosting-PyLadies)
45 |
46 | ### Speakers & coaches
47 | - [Speakers Guide](./sub_pages/speakers_guide.md)
48 | - [Mentors Guide](./sub_pages/coaching.md#mentoring-guide)
49 | - [Coaches](./sub_pages/coaching.md#be-a-coach-at-one-of-our-workshops)
50 |
51 | ### Accounts
52 | - [Our social media accounts](./sub_pages/social_media.md#over-view-of-accounts-we-have)
53 | - [Account management](./sub_pages/accounts.md)
--------------------------------------------------------------------------------
/organizing/sub_pages/about_pyladies.md:
--------------------------------------------------------------------------------
1 | # PyLadies
2 |
3 | PyLadies is an international mentorship group for marginalized genders, such as but not limited to non-binary people, trans people, and women in tech, with a focus on helping our community become active participants and leaders in the Python open-source community. All skill levels welcome!
4 |
5 | Founded in 2011 during PyCon PyLadies was a response to the lack of representation and diversity within the Python community.
6 |
7 | Our mission is to promote, educate and advance a diverse Python community through outreach, education, conferences, events and social gatherings. To learn more about the global community, visit the [PyLadies website](https://pyladies.com).
8 |
9 | **Page Contents**
10 |
11 | - [Membership](#membership)
12 | - [PyLadies Global council](#pyladies-global-council)
13 | - [Berlin Chapter](#berlin-chapter)
14 | - [Places you can find us](#places-you-can-find-us)
15 | - [Joining our slack](#joining-our-slack)
16 |
17 | # Membership
18 |
19 | Anyone in the community can become an official member by [signing up](https://docs.google.com/forms/d/e/1FAIpQLSfknZgGu8HRA9UXiKoD0MWZ-vxOMHKRK5kJ_iK67tZq2pV6Qg/viewform) to do so, memberships offers:
20 | - automatic Python Software Foundation membership
21 | - the option to vote in PyLadies elections
22 | - offer feedback & get involved in the communities growth
23 |
24 | ## PyLadies Global council
25 |
26 | In 2020 a global PyLadies council was formed. The Council has 9 seats, including 6 seats selected by public election with a 2 year service commitment and 3 seats selected by application with a 1 year service commitment. Additionally the [Council has a diversity and inclusion requirement](https://github.com/pyladies/global-organizing/blob/main/process/pyladies_global_council_election_proposals.md#diversity-and-inclusion-requirements) that sets a maximum of 3 seats to be filled by members from the same country of residence. You can read more about the council [here](https://pyladies.com/blog/Announcing-the-Inaugural-PyLadies-Global-Council/inaugural-pyladies-council/).
27 |
28 | ## Berlin Chapter
29 |
30 | The Berlin chapter has existed since 2013 and runs monthly meetups/ workshops through Meetup.com. We are more than 1000 members strong, although most sessions run with between 30-50 attendees (pre-pandemic). We have members of all experience levels and backgrounds.
31 |
32 | You can get a sense of the events we run by looking at the past events on [Meetup](https://www.meetup.com/pyladies-berlin/events/past) we also have some slides and materials from past events in this [repository](../../README.md#past-workshops)
33 |
34 | ## Places you can find us
35 |
36 | - [Meetup](https://www.meetup.com/pyladies-berlin)
37 | - [Slack](https://pyladies.slack.com)
38 | - [Email](mailto:berlin@pyladies.com)
39 | - [Twitter](https://twitter.com/PyLadiesBer)
40 | - [Instagram](https://www.instagram.com/PyLadiesBerlin/)
41 | - [LinkedIn](https://www.linkedin.com/in/pyladies-berlin-32879a18a/)
42 | - [Facebook](https://www.facebook.com/PyLadiesBerlin)
43 | - [YouTube](https://www.youtube.com/user/PyLadiesBerlin)
44 |
45 | *Please note that as we are all volunteers it can take us a while to respond*
46 |
47 | ### Joining our slack
48 |
49 | Slack is where you can find out about upcoming events, scholarship opportunities, jobs, learning resources, you can ask and answer questions, find mentors and join discussions about various topics including conversations about Python to being a gender minority in tech.
50 |
51 | 1. [https://slackin.pyladies.com](https://slackin.pyladies.com) enter your email address.
52 | 2. Accept the email invitation
53 | 3. Go to the [workspace](https://pyladies.slack.com)
54 | 4. Join the channels that interest you, we recommend #city-berlin, #city-germany #jobs-europe
55 |
56 | Every person involved in our events and online community should comply with our [Code of Conduct](https://www.pyladies.com/CodeOfConduct/)
57 |
58 | ### Further reading
59 |
60 | - [Women in tech: Germany](http://blog.honeypot.io/women-in-tech-germany/)
61 | - [Women in tech: negative experiences](https://bdtechtalks.com/2019/03/21/sustaining-women-in-technology-stem/)
62 | - [Writing effective and inclusive job descriptions](https://medium.com/@meb_57007/writing-effective-and-inclusive-job-descriptions-ace2a302f30a)
63 | - [Stop calling women females](https://www.buzzfeed.com/tracyclayton/stop-calling-women-females?utm_term=.ba9GR6nEx4&source=post_page---------------------------#.tfJvEZzlPb)
64 | - [Why women leave tech](https://medium.com/tech-diversity-files/if-you-think-women-in-tech-is-just-a-pipeline-problem-you-haven-t-been-paying-attention-cb7a2073b996#.2xw2y2f1s)
65 |
66 |
67 | ---
68 |
69 | ## Ready for more?
70 |
71 | [> back to start point](../start_here.md)
72 | [> supporting the community](./supporting_pyladies.md#other-ways-you-might-support-the-community)
73 | [> sponsoring PyLadies Berlin](./hosting_and_sponsorship.md#sponsoring-pyladies)
74 |
--------------------------------------------------------------------------------
/organizing/sub_pages/accounts.md:
--------------------------------------------------------------------------------
1 | # Accounts
2 |
3 | ## Accessing our accounts
4 |
5 | To access the sites below you will need to be part of our google group and be given access to our shared last pass account. To get access please send an email to [berlin@pyladies.com](mailto:berlin@pladies.com). ⚠️ Please be careful if you need to update a password that it is indeed saved in our shared password manager (lastpass).
6 |
7 | ### Tools
8 |
9 | - [google group](#google-group)
10 | - [last pass](https://www.lastpass.com) :- [getting started with our account sharing](#lastpass)
11 | - [2FA](#2fa)
12 | - [Zapier](https://zapier.com/)
13 | - [Trello](https://trello.com/b/6ugXFBTM/pyladies-berlin)
14 | - [Telynx](https://telnyx.com/)
15 | - [Streamyard](https://streamyard.com/)
16 |
17 | ### Social accounts
18 |
19 | - [Meetup](https://www.meetup.com/pyladies-berlin)
20 | - [PyLadies email](mailto:berlin@pyladies.com) :- [email account management](#email-account-management)
21 | - [Twitter](https://twitter.com/PyLadiesBer)
22 | - [Instagram](https://www.instagram.com/PyLadiesBerlin/)
23 | - [LinkedIn](https://www.linkedin.com/in/pyladies-berlin-32879a18a/)
24 | - [Facebook](https://www.facebook.com/PyLadiesBerlin)
25 | - [YouTube](https://www.youtube.com/user/PyLadiesBerlin)
26 | - [Twitch](https://www.twitch.tv/pyladiesberlin)
27 |
28 |
29 | For guidelines on how for our social media accounts you can check out our documentation [here](./social_media.md).
30 |
31 | ## Google group
32 |
33 | The google group is used to be able to share files and calendar invites. To get access please send an email to [berlin@pyladies.com](mailto:berlin@pladies.com)
34 |
35 | ## Lastpass
36 |
37 | We are currently using Lastpass premium family (due to expire in Sept 2023) this allows us to share full folders with "family members", the number of members allowed is limited but individual passwords can be shared also. The most active members will be given access to the shared folder and other members can request for certain passwords to be shared with them.
38 |
39 | ## 2FA
40 |
41 | For some of our accounts we have 2FA set up, this offers an additional layer of security but poses a problem of shared authentication. To get around this we have set up a phone number with Telynx that can be used for 2FA and sends messages to the slack channel #2fa-open
42 |
43 | ### Example 2FA Googlemail
44 |
45 | With Google it is likely you will first see the following screen hat is linked to a specific device:
46 |
47 |
48 |
49 | To avoid relying on finding the person with the device to find the code we set up the joint 2FA with Telynx. To use this you will need to choose `Try another way` at the bottom of the screen.
50 |
51 |
52 |
53 |
54 | Then select `Get a verification code at (***)***_**17`
55 |
56 |
57 |
58 | The code will be available in the PyLadies slack in the channel `#2fa-open`.
59 |
60 |
61 |
62 | ## Email account management
63 |
64 | - Add a label with your name when you are responsible to follow up on an email
65 | - If you read an email but don't intend to respond, please mark it unread so it does not get missed
66 |
67 | # Ready for more?
68 |
69 | [> back to the starting point](../start_here.md)
70 | [> social media guidelines](./social_media.md)
71 | [> supporting the community](./supporting_pyladies.md#other-ways-you-might-support-the-community)
--------------------------------------------------------------------------------
/organizing/sub_pages/coaching.md:
--------------------------------------------------------------------------------
1 | # Coaching and mentoring other PyLadies
2 |
3 | We have folks in our community at all different levels, different domain and different stages of their career. Most of us did not learn in isolation and/or appreciate the support and encouragement of others. This is what makes communities like ours so key to creating a more diverse and inclusive Python community and tech industry. We don't believe you need to be an expert in a topic to support someone else but you do need to be patient, friendly and open to the fact you will likely learn just as much as those you coach. It's often said the best way to learn something is to teach it, so regardless of what your current knowledge level is we encourage you to consider coaching others in the community.
4 |
5 | **Page Contents**
6 |
7 | - [Support others on slack](#support-others-on-slack)
8 | - [Be a coach](#be-a-coach-at-one-of-our-workshops)
9 | - [Offer mentorship](#offer-mentoring-sessions)
10 | - [Mentoring guide](#mentoring-guide)
11 | - [Coaching guides](#coaching-guides)
12 |
13 | ## Support others on slack
14 |
15 | Often folks will post questions on slack, even if you are not totally sure of the answer, if you can give some time to support the person with debugging their problem it will no doubt encourage them to continue with the task and ask more questions in the future. Asking questions is a part of or community's culture, asking them in public is even better, then not only yourself but also others can learn from the answer or discussion. Sometimes of course it's easier to move into a call or DM but please ensure this happens in a way that both sides feel comfortable and follows our [Code of Conduct](https://www.pyladies.com/CodeOfConduct/).
16 |
17 | ## Be a coach at one of our workshops
18 |
19 | Often we look for coaches for our events, this can be either for a one off or series of events, there is never any obligation. However if you have time it's a great way to support both attendees and those who are running the workshop. Event organizers will post in our slack channel [#city-germany-coaches](https://pyladies.slack.com/archives/C02U8K95FQC) with details of the event. You should expect that as well as attending the event you might need a couple of hours in the days beforehand to get familiar with the material. Again you often don't need to be an expert in the topic, the workshop lead will be able to handle more in depth questions but offering debugging support and rubber ducking can often be enough to help someone get through an exercise and prevent the workshop lead from being over stretched.
20 |
21 | ## Offer mentoring sessions
22 |
23 | Something else you might consider is setting time in your calendar free for folks to ask you questions or advice. You could use a tool like [Calendly](https://calendly.com/) to set up "bookable" slots in your calendar where folks can join a video call to talk to you. Be sure you only offer as many slot as is sustainable for you and as always that the sessions follow our [Code of Conduct](https://www.pyladies.com/CodeOfConduct/).
24 |
25 | ### Mentoring guide
26 |
27 | Here is a collection of ideas of how you and your mentee might get started. If you have an idea or know something that worked well for you feel free to open a pull request! <3
28 |
29 | - **Set expectations**
30 |
31 | Before any sessions take place we recommend setting expectations on both sides. You can think about the following questions.
32 |
33 | - What do you both hope to achieve with the mentorship sessions?
34 | - How much time can you both commit?
35 | - What communication tools do you both prefer?
36 | - How do you prefer feedback? ie in person or written.
37 |
38 | - **Respect each other time**
39 |
40 | Respecting each others time is very important, so if you have a session booked please try to turn up (either in person or remotely), if you do need to cancel try do so with as much time before as you can. Similar if you agree on an hour then end the session after an hour or ask if the other person has more time. This will ensure the relationship stays healthy and sustainable and it's transparent to both sides what they can expect.
41 |
42 | - **Recap and leave notes**
43 |
44 | At the end of the session it is good to reserve the last 5/10 minutes to write down a short summary of the session, what you did and what you want to do next.
45 |
46 | - **Find a cadence that works for you both**
47 |
48 | To begin with we recommend setting a limited amount of sessions or time you want the mentoring to run for, and example being every week for 3 months. This allows for a organic stop point where both sides can then evaluate if they are happy to continue or would rather change or stop the sessions.
49 |
50 | - **Create feedback loops**
51 |
52 | We encourage mentors to regularly give their mentees the opportunity to give feedback, you might create a small survey or do it as a retrospective for them to think about if they are meeting their goals, what is working and what might need changing.
53 |
54 | - **Ideas for mentoring sessions**
55 |
56 | - Build a project together
57 | - Small coding exercises, using platforms like [exercism](), or [code wars]()
58 | - Coding assignments, perhaps you can share something from your work and have the mentee complete it either together or alone and then give them feedback
59 | - Work on an open source project together
60 | - Read a book together, perhaps there is a topic the mentee wants to understand together
61 | - If a whole book is a bit daunting selecting articles for your mentee to read might be more approachable
62 | - AMA,a session like this might help the mentee better understand your job role and what opportunities are out there
63 | - Growth coaching, you can support your mentee in discovering what direction they want to grow in and help them build a learning plan
64 |
65 |
66 | ## Coaching Guides
67 |
68 | If you are looking to get started with coaching and interested to know how it works we recommend checking out this guide from Open Tech School https://www.opentechschool.org/guides#coaching-guidelines and this similar one from [Django girls](https://coach.djangogirls.org/tips/). Do not forget that any interactions between members must also follow our [Code of Conduct](https://www.pyladies.com/CodeOfConduct/)
69 |
70 |
--------------------------------------------------------------------------------
/organizing/sub_pages/conference.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/organizing/sub_pages/conference.md
--------------------------------------------------------------------------------
/organizing/sub_pages/facilitating_events.md:
--------------------------------------------------------------------------------
1 | # Facilitating an event
2 |
3 | Facilitating an event can include many different aspects of event organization. Normally at least one person is required to lead the event though ideal there are two or more people involved. Some sections will not be relevant so feel free to jump to those which are, where possible we will try guide you to get to the relevant information for your needs as quick as possible. What's important to remember when planning an event is what our community's mission is and if therefore the event you want to run is best suited to PyLadies or perhaps to another other group (we are open to and have previously collaborated with other groups). Secondly all events and attendees **must** abide to our [Code of Conduct](https://www.pyladies.com/CodeOfConduct/). Otherwise it is open for you to bring your ideas to the community. The guides below will give you examples of what has worked before as well as how to set up events on our meetup page, where to find our logos, post on our social media, handle Code of Conduct breaches, support speakers, and collect feedback.
4 |
5 | [> I have an idea for an event what do I need to do to run it?](#what-running-an-event-involves)
6 | [> I have an idea for a event and I need support to run it](#getting-support-to-facilitate-your-event)
7 | [> I need a location for my event](./sub_pages/supporting_pyladies.md#what-you-can-expect)
8 | [> I want to setup the meetup page and announce my event](./sub_pages/supporting_pyladies.md#what-you-can-expect)
9 | [> I am looking to support an event](./sub_pages/supporting_pyladies.md#ways-you-can-get-involved)
10 |
11 | **Page Contents**
12 |
13 | - [Who can run a event for PyLadies](#who-can-run-a-event-for-pyladies)
14 | - [What running an even involves](#what-running-an-event-involves)
15 | - [In person event](#in-person-event)
16 | - [Remote event](#remote-event)
17 | - [Getting support to facilitate your event](#getting-support-to-facilitate-your-event)
18 | - [Finding a host](#finding-a-host)
19 | - [Finding speakers](#finding-speakers)
20 | - [Setting up the meetup event](#setting-up-the-meetup-event)
21 |
22 | ## Who can run a event for PyLadies
23 |
24 | In short anyone! If you have something you want to share with the community we encourage you to do so. In this guide we will provide you with resources to help you get started and we encourage you to ask for guidance and support from those who have already gone through the process, though we hope you will not be discouraged if there is not the capacity to do it with you.
25 |
26 | ## What running an event involves
27 |
28 | First you will need to decide on when you want your event to run, our regular sessions run each month on the third Tuesday of the month but you may choose to run an event on another date. Check our [overview](https://docs.google.com/spreadsheets/d/1qc_b39H33XJKjB8E2fkfYpRG19JXkhICesTK4PSTGAc/edit?usp=sharing) for events to see what others are planning and also look at the [google calendar](https://calendar.google.com/calendar/u/3?cid=Y19kaG1xbThpZmM4cW90b244cjhhczBoZ3Zmb0Bncm91cC5jYWxlbmRhci5nb29nbGUuY29t) to see if any other groups are planning events around your chosen date, events can overlap but of course if we can avoid it we try to do so. Below is then a check list of things you will need to organize for the event, we tend to track these on our [trello board](https://trello.com/b/6ugXFBTM/pyladies-berlin), you can get access [here](https://trello.com/invite/b/6ugXFBTM/9b7e64e874384d15ba5deffb9c343116/pyladies-berlin).
29 |
30 |
31 | ### In person event
32 |
33 | [Template Trello card in person event](https://trello.com/c/1kezYBC2/147-month-th-meetup-title-location)
34 |
35 | #### Month before
36 | - [ ] Define Speakers
37 | - [ ] Send [Speakers invitation email](./templates/email_templates.md#speaker-invitation-email)
38 | - [ ] Announce event with speakers, location, gender policy, photo policy (copy [draft meetup](https://www.meetup.com/pyladies-berlin/events/279950871) event)
39 | - [ ] Define hosts & collect host information
40 | - [ ] Send [Host confirmation email](./templates/email_templates.md#host-confirmation-email)
41 | - [ ] Organize Food/ drinks
42 | - [ ] Tweet event when announced ([template](./templates/social_media_templates.md#announcing-an-event-on-twitter))
43 | - [ ] Check with speaker if coaches are needed and [search for coaches](#getting-support-to-facilitate-your-event)
44 |
45 |
46 | #### Two weeks before
47 | - [ ] Tweet event two weeks before ([template](./templates/social_media_templates.md#tweet-for-shortly-before-event))
48 | - [ ] Check with speaker about installation instructions/reading material and update announcement.
49 | - [ ] Update meetup announcement with agenda, networking breaks, if snacks or drinks will be available
50 | - [ ] Check in with hosts and ask if support is needed for reception
51 |
52 | #### Week before
53 | - [ ] Remind attendees to install requirements with comment and/or message on meetup
54 | - [ ] Send coaches the workshop/relevant material
55 | - [ ] [dry run](#supporting-a-dry-run) with speakers
56 |
57 | #### Week of the event
58 | - [ ] Tweet event on week & thank sponsors ([template](./templates/social_media_templates.md#tweet-to-thank-sponsors))
59 | - [ ] Double check with host: microphone (if needed), soft drinks, power plugs, internet. [Host follow up email](./templates/email_templates.md#host-confirmation-email)
60 | - [ ] Ask host if attendees list is needed and/or special location directions
61 | - [ ] Send to host to print [PyLadies arrow signs](https://docs.google.com/presentation/d/1_SNnpaWBK3I74e4TWW4wudf6JMGBSYaq_90W2BiCiEk/edit?usp=sharing)
62 | - [ ] Print [feedback forms](https://docs.google.com/document/d/1jxBpZGpVUFIPMiQhG9O9_c2zi5LHFjhsR0dyCO2dAD4/edit?usp=sharing)
63 | - [ ] Prepare introduction slides [past example](https://docs.google.com/presentation/d/1eXlFE6fCRDP08dmDU563OLSFtH3NGDs0d9u9m-9H9I4/edit?usp=sharing)
64 |
65 | #### Day of the event
66 | Arrive 30-60 mins before and prepare the event.
67 |
68 | - [ ] Check projector, microphone, table setup, power extensions, recording if available.
69 | - [ ] Support speaker(s) to test equipment
70 | - [ ] Stick PyLadies signs to guide attendees the location
71 | - [ ] Hang up or put out print outs with the WIFI (or find a similar solution)
72 | - [ ] Manage reception, give name tags if available
73 | - [ ] During the COVID 19 pandemic (and perhaps later) there might be additional health checks such as vaccination status or proof of a recent test to allow entry
74 |
75 | #### During the event
76 | - [ ] Do introduction and Community announcements (You can find template slides to copy [here](https://docs.google.com/presentation/d/1uriUhoqOH4FH2BYzWgcRowE-MJTvtfpQHlLbHa-K5O4/edit?usp=share_link))
77 | - [ ] Take photos of all the speakers and audience
78 | - [ ] Tweet about it (or after the event with photos) ([template](./templates/social_media_templates.md#tweet-during-an-event))
79 |
80 | #### After the event
81 | - [ ] Tweet after event (if not done during the event) ([template](./templates/social_media_templates.md#tweet-after-an-event))
82 | - [ ] Upload photos to [google drive](https://drive.google.com/drive/folders/1hqNE_Ol8l8dqERk-PZ2xdODWV2Go7wLs?usp=sharing)
83 | - [ ] Open PR with resources to this repository
84 | - [ ] Email sponsors & host to thank them ([template](./templates/email_templates.md#sponsor-thank-you-email))
85 | - [ ] Copy feedback forms to [feedback spreadsheet](https://drive.google.com/file/d/1TnPorEJSaIn4ZE-dPDgLd-4d_0V7by0q/view)
86 | - [ ] Adjust guides if valuable feedback came up
87 |
88 |
89 | TODO ensure these match the trello cards
90 |
91 |
92 | ### Remote event
93 |
94 | [Template Trello card remote event](https://trello.com/c/B0if4jRq/174-month-th-meetup-title-remote)
95 |
96 | #### Month before
97 | - [ ] Define Speakers
98 | - [ ] Send [Speakers guidelines email](./templates/email_templates.md#speaker-emails)
99 | - [ ] Announce event with speakers, location, gender policy, photo policy (copy [draft meetup](https://www.meetup.com/pyladies-berlin/events/279950871) event)
100 | - [ ] Tweet event when announced ([template](./templates/social_media_templates.md#announcing-an-event-on-twitter))
101 | - [ ] Check with speaker if coaches are needed and [search for coaches](#getting-support-to-facilitate-your-event)
102 |
103 |
104 | #### Two weeks before
105 | - [ ] Tweet event two weeks before ([template](./templates/social_media_templates.md#tweet-for-shortly-before-event))
106 | - [ ] Check with speaker about installation instructions/reading material and update announcement.
107 | - [ ] Update meetup announcement with agenda, networking breaks, if snacks or drinks will be available
108 | - [ ] Check in with hosts and ask if support is needed for reception
109 |
110 | #### Week before
111 | - [ ] Remind attendees to install requirements with comment and/or message on meetup
112 | - [ ] Send coaches the workshop/relevant material
113 | - [ ] [dry run](#supporting-a-dry-run) with speakers
114 |
115 | #### Week of the event
116 | - [ ] Tweet event on week & thank sponsors ([template](./templates/social_media_templates.md#tweet-to-thank-sponsors))
117 | - [ ] Create slido to run QA for the event ([how to](#creating-a-qa-with-slido))
118 | - [ ] Prepare introduction slides [past example](https://docs.google.com/presentation/d/1eXlFE6fCRDP08dmDU563OLSFtH3NGDs0d9u9m-9H9I4/edit?usp=sharing)
119 | - [ ] set up [streamyard](#stream-events-on-streamyard)
120 |
121 | #### Day of the event
122 | Join the call or streamyard 30 mins before.
123 |
124 | - [ ] Mic check with the speakers
125 |
126 | #### During the event
127 | - [ ] Welcome people joining the call
128 | - [ ] Do introduction and Community announcements (You can find template slides to copy [here](https://docs.google.com/presentation/d/1uriUhoqOH4FH2BYzWgcRowE-MJTvtfpQHlLbHa-K5O4/edit?usp=sharing))
129 | - [ ] Tweet about it (or after the event with photos) ([template](./templates/social_media_templates.md#tweet-during-an-event))
130 |
131 | #### After the event
132 | - [ ] Tweet after event (if not done during the event) ([template](./templates/social_media_templates.md#tweet-after-an-event))
133 | - [ ] Open PR with resources to this repository
134 | - [ ] Add [chapters to youtube video](./social_media.md#adding-chapters-to-youtube) (after meetup)
135 |
136 |
137 | *If your event is hybrid you will need points from both lists*
138 |
139 | [> I have an idea for a event and I need support to run it](#getting-support-to-facilitate-your-event)
140 | [> I need speakers for my event](#finding-speakers)
141 | [> I need a location for my event](#finding-a-host)
142 | [> I want to setup the meetup page and announce my event](#setting-up-the-meetup-event)
143 |
144 | ## Getting support to facilitate your event
145 |
146 | As well as the tasks listed above you may also need help on the day, that could be to welcome people at registration, be coaches, watch for comments or questions during an online event or for general support because let's face it, its just more fun to do these things together. 🤗
147 |
148 | Once you have an idea for an event you can post in the slack channel [#city-berlin-event-organization](https://pyladies.slack.com/archives/C02UJGVF8JW) and use the command `/create an event proposal`this will give you a short questionnaire to capture the information about the event including what support you would like. You can also join our [monthly organizer meeting](./supporting_pyladies.md#monthly-org-meetings) and add your point to the agenda to ask for support there.
149 |
150 | If you are looking for coaches then you can post directly in the channel [#city-germany-coaches](https://pyladies.slack.com/archives/C02U8K95FQC), note that this channel has folks from all over Germany so be clear if this is for a remote event or one based in Berlin.
151 |
152 | ## Finding a host
153 |
154 | We have many hosts reaching out to us by email, we ask them to fill in the following [form](https://forms.gle/mTkQXXaNpp25f3oS6), this allows us to collect all the required information to pair them with an event. The collected information can be found in our [google drive](https://docs.google.com/spreadsheets/d/15N5kAJcsTmwtalY0JsbH_hwjLrFpSh5JeV-uXF3b3-A/edit#gid=1904672576) (note you will need to be part of our [google group](./accounts.md#google-group) to access this) We try to contact them 1-2 months before the event to book the date, you can use the following [template](./templates/email_templates.md#host-confirmation-email) to reach out to them. If companies are wondering what hosting involves you can point them to the information in this [repository](./hosting_and_sponsorship.md) and ask them to fill in the form linked before.
155 |
156 | When choosing a host how many participants they can accommodate is often the deciding factor. Some location might also be able to sponsor food, childcare or have other factors that match the requirements of your event. In return for hosting we offer companies a 5-10 minute speaker spot at the start of the meetup and thank them on our socials. In the future we also want to add them to our website.
157 |
158 | One week before the event we recommend sending the following [follow up email](./templates/email_templates.md#host-follow-up-email) to ensure everything is ready ahead of the event.
159 |
160 | ## Finding speakers
161 |
162 | We usually ask community members directly to give talks and also have some that reach out to us by email. We ask potential speakers to fill in the following [form](https://forms.gle/K7qGPhzkuAfNmuWNA), this allows us to collect all the required information to announce the event. You can check if we have any speakers in the resulting [google sheet](https://docs.google.com/spreadsheets/d/15N5kAJcsTmwtalY0JsbH_hwjLrFpSh5JeV-uXF3b3-A/edit#gid=502229920) (note that to access this you will need to be part of our [google group](./accounts.md#google-group)).
163 |
164 | Once you have a date for the event you can send an email (or slack message) to the speaker inviting them to the meetup and setting up a dry run (if requested), the [following template email](./templates/email_templates.md#speaker-invitation-email) should help you.
165 |
166 | Around one week before the event we recommend sending this [follow up email](./templates/email_templates.md#speaker-follow-up-email) to check the speaker is ready for the event (this can also be a chance to set up a dry run through if one was requested and it has not happened yet)
167 |
168 |
169 | ## Setting up the meetup event
170 |
171 | We run our events mostly via Meetup.com (occasionally we use [eventbright](https://www.eventbrite.com/)). To be able to create an event and see draft events you will need to be made an organizer in the group, you can [email](mailto:berlin@pyladies.com) us to request this. In the draft events we have a [template event](https://www.meetup.com/pyladies-berlin/events/279950871) which can be copied, the text and some tips can also be found in this [repository](./templates/meetup_template.md#meetup-template).
172 |
173 | There are also some example events you can check: [workshop example](https://www.meetup.com/PyLadies-Berlin/events/258893777/), [talk example](https://www.meetup.com/PyLadies-Berlin/events/260312181/).
174 |
175 | If you have used the two forms for hosts and speakers you should have all the information required to fill in the meetup page. The page can also be updated later so if some details are missing it is fine to announce the event as it is and later add missing details.
176 |
177 | If you still have further questions about how best to run your event, don't hesitate to send us an [email](emailto:berlin@pyladies.com)
178 |
179 | ## Supporting a dry run
180 |
181 | Dry runs are an opportunity for our community members to get feedback on their talks/workshops in a safe space before giving them in front of the community. We aim to offer all speakers this chance to present their material in a smaller group and receive constructive feedback. Ideally dry runs will happen with all the speakers for the event present, this way the speakers can also support each other with feedback and it reduces the number of sessions required. If you are organizing a dry run you can also ask for a couple of volunteers to attend the rehearsal session from the [#city-berlin-events-organisation](TODO add link) slack channel.
182 |
183 | When you are reviewing a talk make notes as the speaker gives their presentation, though also remember to give the speaker visual cues that you are listening. You should also time the speaker, we are not strict on the length but if the speaker plans to give the talk at a conference keeping the talk within the time limit will be important. Here is a list of things you might think about or consider so you can give feedback.
184 |
185 | - Can you determine who the audience is from the presentation, if not how could the speaker make this more clear
186 | - Did the speaker introduce themselves and add a way either at the start or end how the audience can follow them
187 | - What was the top take away for the audience, did the speaker highlight this so it was clear?
188 | - How readable are the slides? examples to look for: amount of text on slides, too much might be distracting, any code needs to be in a large enough and contrast that it can be easily read
189 | - Did the speaker pace themselves, could they go quicker or slower (generally speaking on the day speakers tend to speak quicker)
190 | - Are there any parts that need extra clarification or expect some domain knowledge, it may be an opportunity to make the talk more accessible to a wider audience if additional domain context can be added
191 | - Could additional diagrams or images help explain some concepts?
192 | - Can the speaker use more inclusive language, ie instead of guys use folks
193 |
194 | ## Stream events on Streamyard
195 |
196 | To access our Streamyard account you will need to get access to our lastpass, instructions to do so are [here](./accounts.md#lastpass).
197 |
198 | TODO complete this section
199 |
200 | ** Its possible to have two events run at once
201 |
202 | ## Creating a QA with Slido *(optional)*
203 |
204 | TODO
--------------------------------------------------------------------------------
/organizing/sub_pages/giving_a_workshop_or_talk.md:
--------------------------------------------------------------------------------
1 | # Giving a workshop or talk
2 |
3 | Sharing your knowledge with others is an amazing way to give back to the community which can also greatly benefit your own development. They do after all say a great way to learn something is to teach it!
4 |
5 | We run monthly talk evenings but can also arrange meetups at other times if our content is for example best suited during a weekend as it requires more time than an evening session. Giving a talk at one of our meetups can also be a great practice for giving the same or another presentation a conference. We also run sessions on writing your CFP (call for papers) submission for conferences.
6 |
7 | You don't need to be an expert to give a talk, sharing anything you have learnt will certainly help someone else. We will also help you by discussing the idea together and/or giving feedback on a dry run through (rehearsal).
8 |
9 | We have put together this [speakers guide](./speakers_guide.md) to help you get started but feel free to reach out to us if you have further questions.
10 |
11 | ## Who can speak at our events
12 |
13 | Our events are open to everyone, unless stated otherwise, however, we do give preference to speakers who are gender minorities. We also encourage men who would like to speak to support other speakers either as a mentor or co speaker.
14 |
15 | ## What topics are interesting
16 |
17 | We have a wide range of people of differing experiences in our community. Of course anything Python is greatly appreciated but we also value talks on topics that are important to general engineering skills or broader topics such as devops.
18 |
19 | ## Non coding super powers
20 |
21 | Not all talks need to be technical in subject, we welcome talks that empower and inspire our community in other skill sets such as how to negotiate their wage, how to practice mindful goal setting, how to ask questions, or how to journal. We normally leave space at our events for a 5 minute lighting talk that is on a foundational topic such as those mentioned, this section is named non coding super powers to highlight the importance of also developing in parallel such skills.
22 |
23 | [back to the starting point](../start_here.md)
24 | [organizing an event](./facilitating_events.md)
25 | [supporting the community](./supporting_pyladies.md#other-ways-you-might-support-the-community)
--------------------------------------------------------------------------------
/organizing/sub_pages/hosting_and_sponsorship.md:
--------------------------------------------------------------------------------
1 | # Hosting and Sponsoring PyLadies Berlin
2 |
3 | If you landed here then we assume you are at least interested in knowing how you or your company may be able to support us through hosting and/or sponsorship. Below you will find resources and information on how to do this and what it involves. We're grateful for your support and look forward to collaborating!
4 |
5 | **Page Contents**
6 |
7 | - [Hosting PyLadies](#hosting-pyladies)
8 | - [Register to host PyLadies](https://forms.gle/XdtKq865dqqW3fCD9)
9 | - [Why host an event](#why-host-a-pyladies-event)
10 | - [Company speakers](#company-speakers)
11 | - [Sharing Job positions](#job-postings)
12 | - [Sponsoring PyLadies](#sponsoring-pyladies)
13 | - [what we can offer in return](#what-we-can-offer-in-return)
14 |
15 | ## Hosting PyLadies
16 |
17 | One way many companies support the community by hosting our events. If you are interested to host us please fill in the following [form](https://forms.gle/XdtKq865dqqW3fCD9), which allows us to collect the relevant information and pair you with an upcoming event (note this might take some time depending on the current schedule). If you need more information or perhaps need something to persuade your employer to host us you can check the information below.
18 |
19 | ### Why host a PyLadies event
20 |
21 | By sponsoring one of our events as a host, you are not only promoting Python development and diversity in tech, you can meet and talk to Python developers and enthusiasts. Our Meetups are a great opportunity to present your company, products and services to an interested audience, as well as find talented developers for your team.
22 |
23 | ### Regular Meetups
24 |
25 | We run meetups once a month on the second Tuesday of the month in the evening (7-10pm) These have various themes and cover beginner to advanced topics. We also occasionally run longer events on weekends that allow us to go into topics deeper.
26 |
27 | ### Requirements from hosting companies
28 |
29 | The exact requirements will depend on the event, however below gives you an idea of what we require:
30 |
31 | * projector
32 | * microphone for speakers
33 | * chairs
34 | * if workshop/code along sessions: tables and electricity for participants
35 | * food and drinks (if possible)
36 |
37 | ### Code of Conduct
38 |
39 | Every person involved in our events should comply with our [Code of Conduct](https://www.pyladies.com/CodeOfConduct/).
40 |
41 | ### Job Postings
42 |
43 | We have a slack channel for job posts; you can join our slack [here](https://slackin.pyladies.com) and our find our workspace [here](https://pyladies.slack.com).
44 |
45 | ### Company speaker(s)
46 |
47 | We normally reserve a 5-10 minutes slot after our introduction for a host/sponsor presentation. Speakers should check out our [speakers guide](./speakers_guide.md). Note that:
48 | - Audience level may vary significantly and there will be folks at all stages of their career
49 | - We therefore ak that you assume no prior knowledge but infinite intelligence.
50 | - Consider "folks" instead of "guys" and try to use other inclusive language (find more examples in our speaker guide)
51 | - We know it can be hard, especially for an expert, to present something to an audience without prior knowledge, so we would like to offer to give feedback on slides or support the speaker if they have any questions. To organize this please send us an [email](mailto:berlin@pyladies).
52 |
53 |
54 | ## Sponsoring PyLadies
55 |
56 | If you are a company as well or instead of hosting us you might consider sponsoring us in other ways. Below are the types of sponsorship we have either had in the past or looking for, but if you have another idea in mind please drop us an [email](mailto:berlin@pyladies).
57 |
58 | ### Branded swag
59 |
60 | Currently we are looking for funding to buy swag that we can compensate our speakers and community leaders with. For example we have previous received funding for T-shirts, Tote Bags. When ordering swag we preference organic cotton and fair trade as these match our values of a fairer and more sustainable future.
61 |
62 | ### Childcare
63 |
64 | For some events (particularly those at weekends) we aim to provide child care options to support the participation of parents. This can cost around 500 EUR. As we don't have any form of income or donations we rely on companies to sponsor this for specific events. If you think you would be able to make a cover this for an upcoming event regardless of if yu plan to host the event) please send us a [email](mailto:berlin@pyladies)
65 |
66 | ### Monetary Donations
67 |
68 | At the moment as we have no community bank account it is easiest if the company sponsoring handles the invoice entirely. If this is not possible we can ask the PSV for support to handle the transfer for us.
69 |
70 | ### Resource Donations
71 |
72 | We have also received and welcome donations of books and software licenses which we can then raffle within the community.
73 |
74 | ### Conference Tickets
75 |
76 | Please see our documentation on conferences [here](./conference.md)
77 |
78 | ### What we can offer in return
79 |
80 | We are deeply grateful to those who have sponsored us already and that it means we can reward and thank those who make our community so special as well as contribute to our goal of making the space more inclusive.
81 |
82 | In return for your sponsorship we will add your logo to our website on the sponsors page (still to be implemented), and give you a shout out on our social media. If the sponsorship is for swag we can make it co-branded (ie have your logo also on it) and if the sponsorship goes towards a specific event we will advertise it at the event and invite you to come introduce the company in a 5 minute slot at the start.
83 |
84 | ## Ready for more?
85 |
86 | [> back to the starting point](../start_here.md)
87 | [> about PyLadies](./about_pyladies.md)
88 | [> giving a talk or workshop](./giving_a_workshop_or_talk.md)
89 |
--------------------------------------------------------------------------------
/organizing/sub_pages/resources.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/organizing/sub_pages/resources.md
--------------------------------------------------------------------------------
/organizing/sub_pages/social_media.md:
--------------------------------------------------------------------------------
1 | # Social Media
2 |
3 | ## Over view of the social media accounts we have
4 |
5 | - [Meetup](https://www.meetup.com/pyladies-berlin)
6 | - [Slack](https://pyladies.slack.com)
7 | - [Twitter](https://twitter.com/PyLadiesBer)
8 | - [Instagram](https://www.instagram.com/PyLadiesBerlin/)
9 | - [LinkedIn](https://www.linkedin.com/in/pyladies-berlin-32879a18a/)
10 | - [Facebook](https://www.facebook.com/PyLadiesBerlin)
11 | - [YouTube](https://www.youtube.com/user/PyLadiesBerlin)
12 |
13 | [Accessing our accounts](./accounts.md)
14 |
15 | ## Guidelines
16 |
17 | - [Meetup](#meetup)
18 | - [Slack](#slack)
19 | - [Email](#email)
20 | - [Twitter](#twitter)
21 | - [Instagram](#instagram)
22 | - [LinkedIn](#linkedin)
23 | - [Facebook](#facebook)
24 | - [YouTube](#youtube)
25 |
26 | ### Meetup
27 |
28 | Our meetup is paid for by the PSF. A community member is required to be the main organizer, this may require them to add their credit card details but should not result in them being charged. Other members can be given different roles, which gives them different access rights such as being a co-organizer, event organizer etc In general we are not using these roles strictly but they may be useful to allow folks to create Meetup events.
29 |
30 | - [Setting up an event on meetup](./facilitating_events.md#setting-up-the-meetup-event)
31 | - [Template](./templates/meetup_template.md)
32 |
33 | ### Slack
34 |
35 | The Slack is owned by the global PyLadies group, we have several channels and can also create new ones (which can be later archived) for example to organize specific events.
36 |
37 | There is a private channel called #organizers which has organizers from all the different chapters, mostly resources are shared in open channels but this can be useful for topics with a sensitive subject. If you want to be added please request this in the #city-berlin-events-organisation channel or raise it at one of our [Berlin chapter org meetings](./supporting_pyladies.md#monthly-org-meetings)
38 |
39 | #### Integrations
40 |
41 | We have a number of integrations in slack
42 | - [Zapier](https://zapier.com/)
43 | This allows us to post our tweets in slack automatically as well as sending them to our Facebook group. It can also be used to automate other such interactions, however we only use the free version which limits how many "zaps" we can set up.
44 | - [Workflows](https://api.slack.com/workflows)
45 | Workflows in slack are useful for guiding members to different resources and collecting information. We have a couple of workflows set up for when members join certain channels and also for creating events. They can be created and updated in the slack settings.
46 | - 2FA
47 | Our 2FA account uses [Telynx](https://telnyx.com/) to post in slack. [Read more on our 2FA](./accounts.md#2fa)
48 |
49 |
50 | ### Twitter
51 |
52 | ***Note that currently all tweets will also be posted in the slack channel #city-berlin and to our Facebook group.***
53 |
54 | [Templates](./templates/social_media_templates.md)
55 |
56 | ### Instagram
57 |
58 | [Templates](./templates/social_media_templates.md)
59 |
60 | ### LinkedIn
61 |
62 | [Templates](./templates/social_media_templates.md)
63 |
64 | ### Facebook
65 |
66 | [Templates](./templates/social_media_templates.md)
67 |
68 | ### YouTube
69 |
70 | #### Adding chapters to YouTube
71 |
72 | TODO
--------------------------------------------------------------------------------
/organizing/sub_pages/speakers_guide.md:
--------------------------------------------------------------------------------
1 | # Speaker guidelines
2 | This is a guide for speakers at PyLadies Berlin meetups. The following guidelines apply to **talks and workshops**; for workshops, you find additional recommendations below.
3 |
4 | ## General guidelines
5 | ### Audience level
6 | Expect all levels. From people that have never tried Python before to Python data science professionals and engineers. In our meetups, we aim that beginners (having programmed a bit before) are able to follow most of the things.
7 |
8 | ### Time
9 | We suggest talks to be **30 mins or less** (time is aligned with conference talks, so you could take the talk to a conference as well) and we also encourage short talks or lightning talks of 5 mins only.
10 |
11 | ### Speaker coaching and rehearsals
12 | We offer coaching. That means you can **discuss your talk/workshop material with one of us** and ask to go through the slides/workshop outline and give feedback. It is also possible to arrange a talk rehearsal session (dry run through) live or via video call. When you sign up to be a speaker we will give the option to request this. However if you want to discuss this more please get in touch with us!
13 |
14 | ### Filling in our speakers form
15 | Please fill in the [speaker's form](https://forms.gle/K7qGPhzkuAfNmuWNA) we will ask you questions so we can collect all the information we require and inform you about speaking at our events. This list is to give you an idea of what information we will be asking for, however details you don't know at the time can also be collected later.
16 | * Talk/workshop title and description
17 | * length of your talk
18 | * short bio
19 | * twitter handle (if you would like to link our tweets with your account)
20 | * You can get an example of these [here](https://www.meetup.com/PyLadies-Berlin/events/260312181/)
21 | * If there are resources that might be helpful for attendees, they can be included in the description.
22 | * What kind of coaching would you like from us, if any?
23 | * Do you need anything more than HDMI cable?
24 |
25 | ### Day of the Meetup
26 | It is best to come **15-30 mins earlier** to check that everything works fine with your laptop. If you prefer to use our laptop, you need to send the talk to us beforehand.
27 |
28 | ### Resources for an amazing talk
29 |
30 | - [CFP and public speaking](https://github.com/PyLadiesBerlin/resources#public-speaking---call-for-proposals---cfp)
31 |
32 | ## Additional workshop guidelines
33 |
34 | ## Session format and time
35 | * Keep talk and workshop apart, if possible.
36 | * As suggested above, talks should be 30 mins or less; the hands-on part can be an hour.
37 | * Before your part, we have an intro and there might be a company short talk first.
38 | * After the talk, take a 15-20 mins break for networking and setup. People are more comfortable to talk after the talk, so it is a good time to let them mingle.
39 | * After networking allocate up to 10 mins for setup (for the people that had problems to set up at home).
40 |
41 | ## Workshop format
42 | * Please make sure that the hands-on part is possible to follow as a beginner.
43 | * **Active coding facilitates learning** - and is more fun than only typing code from the screen or copy/pasting.
44 | * From our experience a self-paced format where attendees take their own time with coaches to support them is best for mixed level audience.
45 | * We highly recommend to pair people as part of the workshop.
46 | * We have also had a lot of success with an interactive format where attendees had to choose cards with workshop-related topics which they then had to explain to each other. [Example](https://github.com/PyLadiesBerlin/resources/blob/master/workshops/23_Data_Wrangling_Pandas/README.md)
47 | * If it is a code along format, consider a catch-up point giving people time to catch up if they are left behind.
48 | * If there are exercises to complete, it is generally a useful practice to have already solved shortcut steps that the attendees can take if they get stuck (e.g. folder with solved steps. [Example](https://github.com/mei-li/multiling-chat)
49 |
50 | ## Workshop coaches
51 | Usually, if the workshop is self-paced, it is important to have people (coaches) helping on the spot. Having a couple of coaches for technical issues is always helpful. **Let us know, if coaches are needed.** The number of attendees can be up to 50, depending on the topic - so the number of coaches needs to be adapted accordingly.
52 |
53 | ## Avoiding installation problems
54 | Installation problems can be very frustrating. At workshops, we usually have many OSes (Windows, Mac, Linux, maybe Chrome OS) and very different tech skill levels - so problems always arise. To avoid spending too much time on this and to give everyone their own time and comfort to prepare, it has been helpful to:
55 | * Announce **all instructions** _1 week before_ the workshop at the latest. We usually offer help with installation before the workshop in our slack.
56 | * Take into account **all OSes**.
57 | * Plan some 15 mins for setup; if issues are not resolved within these 15 mins, people can pair with others. Do not spend more than these 15 mins as this is frustrating for the rest of the participants.
58 |
59 | ## Material available
60 | * Make sure that data, URLs, and code are publicly available and people can download it or copy/paste it even without a Github account.
61 | * Especially for large data files, ensure availability before the event. Simultaneous large file downloads are problematic.
62 | * People will ask for the slides, so consider if you would like to share them.
63 |
64 | ## Technical requirements
65 | We expect to have internet, chairs, tables and power. Let us know if a particular chair/table distribution is necessary. Depending on the space, a microphone might be needed. If talk and coding will be done simultaneously, let us know beforehand to search for a hands-free microphone.
66 |
67 | ## For workshops, please send us additional information on
68 | * **Expected knowledge and resources.** We need this _1 month before_ the meetup to announce it and put links in the workshop description or the comments.
69 | * **Installation instructions** and preparation resources, at least _1 week before_ the workshop.
70 | * **Number of coaches** needed/ number of attendees per coach. What would the coaches need to know?
71 | * Do you need a hands-free microphone for live coding?
72 |
--------------------------------------------------------------------------------
/organizing/sub_pages/supporting_pyladies.md:
--------------------------------------------------------------------------------
1 | # Supporting PyLadies
2 |
3 | PyLadies is completely ran by volunteers, we all have our own reasons for choosing to donate our free time to the community and we all do so in different ways. We welcome your support and will do our best to support you.
4 |
5 | **Page Contents**
6 |
7 | - [What you can expect](#what-you-can-expect)
8 | - [Ways you can get involved](#ways-you-can-get-involved)
9 | - [Recognizing your work, what we can offer](#recognizing-your-work-what-we-can-offer)
10 |
11 |
12 | ## What you can expect
13 |
14 | Supporting can range from one off events, regular or a series of events, handling our social media or email, donating money or resources, or something else which you believe will benefit our community. As you will do this in your free time we always recommend to think about what is sustainable for your situation, and something you will feel is beneficial to you. For example giving a workshop might help you develop your public speaking skills while facilitating one might help develop managerial or team building skills. As a member of our community you are empowered to lead it and advocate for the things you feel are important. This work can be exciting and rewarding, it will not only help you build up skills, build a network within the broader Python community but also have a huge impact on many other community members. We recognize that many of you have other commitments and may have to drop out for a while or entirely if your situation changes.
15 |
16 | ### Testimonials
17 |
18 | *"I love contributing to the community. I consider myself a self taught/ community taught developer and I am thankful to those who supported me on my journey transitioning into tech. I spend around 4-5 hours a week doing various tasks including talking to other community members, answering emails, checking and posting on our social media platforms, facilitating events as well as creating content. I mentor other community members who wish to get involved and speak to folks who are making similar transitions to myself to give them some insight and encouragement. I joined the org team in 2018 when I was transitioning into tech, though I had no technical skills at that point I could support with setting up events. I have taken a couple of breaks from being an organizer when I needed to put my focus elsewhere, but find myself returning due to the reasons above and because of the many friends I have made. I couldn't imagine not being involved in some capacity."*
19 | ***- Jessica Greene***
20 |
21 |
22 | *"As a student, it was really nice to be completely embraced and equally valued by other ladies, joining and organizing PyLadies events also gave me an opportunity to meet people working with Python and learning about the tools being used in the industry."*
23 | ***- F***
24 |
25 |
26 | *"I love being part of the PyLadies community because I love connecting with like minded people, supporting each other, and working together towards PyLadies’ mission."*
27 | ***- M***
28 |
29 |
30 | *"For a long time I felt like I did not belong in tech. On the way, I met many people who felt as I did. This motivated me to try my best to make others feel included in the PyLadies community. Through building a community, I have found my way to belong as well."*
31 | ***- L***
32 |
33 |
34 | *"It is because of this group, in chapters in Rio de Janeiro, Mexico City and especially Berlin, that I was able to change careers and meet my closest care network. Especially in Berlin, a city with more than 30% foreigners far from their family network, PyLadies makes a bit of a difference in life."*
35 | ***- P***
36 |
37 |
38 | *"I met some of the most supportive and inspiring organizers at PyLadies. It’s a great place to share knowledge and learn. To get motivated, and inspired, and pass on sponsorship opportunities as you get ahead in you career - pay it forward. I can’t think of a better network with worthier more hardworking, giving and sincere folks. I truly cherish these connections and experiences. So grateful."*
39 | ***- Noa Tamir***
40 |
41 | ## Ways you can get involved
42 |
43 | As we mentioned there are many ways to get involved. Some of the most common ways include:
44 |
45 | - [giving a talk or workshop](./giving_a_workshop_or_talk.md)
46 | - [facilitating an event](./facilitating_events.md)
47 | - [being a coach or mentor](./coaching.md)
48 | - [helping other on slack](./coaching.md#support-others-on-slack)
49 | - [managing our social media platforms](./social_media.md)
50 | - [managing our emails](./accounts.md#email-account-management)
51 |
52 | ### Other ways you might support the community
53 |
54 | However perhaps you see an opportunity we have not yet identified, we welcome ideas and suggestions. If you want to discuss them more we suggest attending our [monthly org meeting](#monthly-org-meetings) which takes place on the last Thursday of the month, we post reminders including details on how you can join in our slack.
55 |
56 | ## Recognizing your work, what we can offer
57 |
58 | While we normally can't financially compensate folks for their work we still think it's important to recognize those who make our community so awesome :sparkle: we therefore have a couple ways that we can highlight your work:
59 |
60 | - Add your volunteer work on your CV, we think it's pretty awesome that your supporting the community and so do employers! Incase you need a reference you can email us at [berlin@pyladies.com](mailto:berlin@pyladies.com) and we will do our best to write one from our official account.
61 | - Add your volunteer work on LinkedIn, you can add your volunteer work to PyLadies Berlin on your profile and let potential employers know that you are supporting the community.
62 |
63 | *example of LinkedIn accreditation*
64 |
65 |
66 |
67 | - *coming soon* Add yourself to our website, we aim to make it easy to open a PR and add yourself as a contributor on our website. As soon as this is possible we will post information here.
68 | - *coming soon* Let us shout about you! We would love to make some noise about how you are supporting our community, we will collect some basic information so we can post on our social media platforms and show our appreciation.
69 | - *coming soon* We are currently waiting on PyLadies Berlin T-Shirts and from time to time receive other swag which we receive for those who contribute to our community, what more of an incentive do you need ;)
70 |
71 |
72 | ## Monthly Org Meetings
73 |
74 | We run monthly organizer meetups on the last Thursday of the month between 7pm-8pm (Berlin time) you have both the option to join in person or remotely. If you want to know how we plan events/ make decisions in the community either as purely an observer or more actively then you are welcome to join us :heart:
75 |
76 | Sometimes we will also try offer the main session trainings or facilitated discussion sessions that might interest community members involved in organization :slightly_smiling_face:
77 |
78 | If you want to be added to the calendar invite email us at [berlin@pyladies.com](berlin@pladies.com) with the subject: `Pyladies org meetings`. We also post reminders including details on how you can join in our slack.
79 |
80 | Agenda points are set [here](https://www.google.com/url?q=https://docs.google.com/document/d/11kaYPgLb4HXavPUbgTTngdGLXZjNMjW-LNnA4FkguYY/edit?usp%3Dsharing&sa=D&source=calendar&usd=2&usg=AOvVaw2nxnPeDc7vquLAu5sG459c) (ask in slack or email us if you cannot access it).
81 |
82 | We have three sections:
83 | - **Announcement:** short announcements that require no input or a thumbs up thumbs down from the group
84 | - **Request for help:** 5 minute slot to make your proposal and ask for help (including questions posed to you)
85 | - **Discussion topics:** Longer topics which require more input & open discussion
86 |
87 | Each section has a time limit, then within each section we run a [coffee style facilitation](https://www.scrum.org/resources/blog/lean-coffee-5-minutes): 3 minutes are put on the clock, after 3 minutes we can move on to the next or keep going for 3 more minutes. Topics not reached will move to the top for the next meeting.
88 |
89 | Please be respectful and thoughtful, this is a space for all to participate and give their input. If you have spoken on a number of topics, give space on the next for other folks. Please stick to the current topic.
90 |
91 | We rotate facilitation of this meeting and if you are interesting in running the facilitation let us know via email.
92 |
93 |
94 | ## Ready for more?
95 |
96 | [> back to the starting point](../start_here.md)
97 | [> other ways to support the community](./supporting_pyladies.md#other-ways-you-might-support-the-community)
98 | [> hosting PyLadies Berlin](./hosting_and_sponsorship.md#hosting-pyladies)
99 |
--------------------------------------------------------------------------------
/organizing/sub_pages/templates/email_templates.md:
--------------------------------------------------------------------------------
1 | # Email Templates
2 |
3 | You will find copies of these emails in our email drafts labeled TEMPLATE, ***please ensure you first copy the text to a newly composed email before use***. TODO add this in email.
4 |
5 |
6 | ## Job Posting Emails
7 |
8 | Hi {POSITION_ADVERTISER},
9 |
10 | It is great to see that {COMPANY NAME} wants to share your open positions with our community. As well as reaching a community of talented Python engineers you can also increase diversity by hiring members of our community, however we would strongly recommend that you also look into achieving inclusion that can sustain such diversity. We also highly recommend reading Elizabeth Black's short article [1] regarding writing inclusive job descriptions incase you are not already familiar with it.
11 |
12 | If you'd like, you're welcome to share your job posts in our slack [2] in the channels #jobs and #jobs-europe. We recommend that you explicitly mention what makes the working environment inclusive as this is important to many of our members.
13 |
14 | [1] [How to write effective and inclusive job descriptions](https://medium.com/@meb_57007/writing-effective-and-inclusive-job-descriptions-ace2a302f30a)
15 |
16 | [2] [Slack invitation](https://pyladies-berlin.herokuapp.com/)
17 |
18 | Best wishes,
19 |
20 | {PYLADY} & the Berlin PyLadies
21 |
22 | ---
23 |
24 |
25 | ## Speaker invitation email
26 |
27 | **:white_check_mark: To be sent roughly 5 weeks before the meetup**
28 |
29 | Hi {SPEAKERS NAME} :smile:
30 |
31 | We are so excited that you want to share your knowledge with our community. We would like to invite you to speak at our Meetup on {DATE} :heart_eyes:
32 |
33 | I'm {PYLADY}, I am organizing the event and will be your point of contact. Please reply to this email and let us know if the date works for you.
34 |
35 | I will be publishing the meetup page soon and announcing the event on our social media. For that, we will use the information you provided us in the google form but no problem if you need to update any information, just let us know.
36 |
37 | I wanted to also take the opportunity to share this [speaker guide](https://github.com/PyLadiesBerlin/resources/tree/main/organizing/sub_pages/speakers_guide.md) [TODO check link] with you, it covers both workshop & speaking events, so not everything will be applicable.
38 |
39 | [OPTIONAL - IF SPEAKER REQUESTED A DRY RUN]
40 |
41 | As you requested a dry run in the form I would like to suggest we meet {LOCATION OR ONLINE} on {DATE} at {TIME}, let me know if that works for you and I will send you a calendar invite.
42 |
43 | Don't hesitate to reach out if you have any questions or I can already be of assistance. :smile:
44 |
45 | Greetings,
46 | {PYLADY} & the Berlin PyLadies :woman_technologist::snake:
47 |
48 |
49 | ---
50 |
51 |
52 | ## Speaker follow up email
53 |
54 | **:white_check_mark: To be sent roughly one week before the meetup**
55 |
56 | Hi {SPEAKERS NAME} :smile:
57 |
58 | our meetup is coming up and we are much looking forward to having you join us! We hope your preparations are going well, do reach out if you have any questions or require support.
59 |
60 | ### In person
61 |
62 | We will be at the location half an hour before the event begins, we welcome you to join then to test you can share you slides.
63 |
64 | ### Remote
65 |
66 | We will join the call/ streaming platform half an hour before the event begins, we welcome you to join then to test you can share you slides. The link for the call/platform is:{LINK FOR REMOTE EVENT} (you can also find this in the calendar event).
67 |
68 | Best wishes,
69 | {PYLADY} & the Berlin PyLadies :woman_technologist::snake:
70 |
71 |
72 | ***Also add if applicable***
73 | - any location specific information
74 | - any covid 19 regulations
75 |
76 | ---
77 |
78 |
79 | ## Host confirmation email
80 |
81 | **:white_check_mark: To be sent roughly five week before the meetup**
82 |
83 | Hi {HOST CONTACT NAME} :smile:
84 |
85 | we are really happy to know {HOST NAME} would like to support our community by hosting one of our events. We would like to know if you can host our event on {the evening of | during the day on DATE}. Please let us know as soon as possible by replying to this email if the date works for you, if not, no problem we will keep you in mind for a future event.
86 |
87 | [OPTIONAL IF THEY OFFERED CATERING
88 | In the form you mentioned you would be able to also supply catering if you are still able to provide this please let us know, as we don't have any bank accounts for our community it is our preference that you order and pay for this. We can help with suggesting services we have used in the past, let us know if you need any support. We normally have 30-50 attendees but will confirm the expected number of attendees one week before the event.
89 |
90 | [OPTIONAL IF THEY OFFERED CHILD CARE]
91 | In the form you mentioned you would be able to also supply child care, we will open a form to collect the requirements from attendees, we will share the results as soon as we have them, latest 3 weeks before the event. We ask that you book the child care direct, if you have a service you are already familiar with then it is fine you use it, in the past we have used the following service and can recommend it: www.babysitter-express.de We are also aware of https://www.nikis-kinderclub.de/ as a potential alternative.
92 |
93 | Greetings,
94 | {PYLADY} & the Berlin PyLadies :woman_technologist::snake:
95 |
96 | ***Also add if applicable***
97 | - ak if there are location specific information or clarify anything unclear in the form
98 | - ask if there are covid 19 regulations
99 |
100 | ---
101 |
102 |
103 | ## Host follow up email
104 |
105 | **:white_check_mark: To be sent roughly one week before the meetup**
106 |
107 | Hi {HOST CONTACT NAME} :smile:
108 |
109 | our meetup is coming up and we are much looking forward to collaborating with {HOST NAME}!
110 |
111 | If you have any outstanding questions please let us know. We have {NUMBER OF ATTENDEES ON MEETUP} signed up and based on previous experience are expecting roughly {NUMBER OF ATTENDEES ON MEETUP / 3} to {NUMBER OF ATTENDEES ON MEETUP / 2} attendees (though please note this can be difficult to predict).
112 |
113 | We will come to the location circa half an hour before the event to check the set up and allow for speakers to test their slides. If you require us to support folks coming into the location let us know so we can ensure there is someone available to do this. In our [Google drive](https://docs.google.com/presentation/d/1_SNnpaWBK3I74e4TWW4wudf6JMGBSYaq_90W2BiCiEk/edit?usp=sharing) you will find a couple of PyLadies branded signs which can be used to help guide attendees to the right place (if you prefer to make your own please use one of logos found [here](https://drive.google.com/drive/folders/1dV2Ezol4Ikf3J2a1TtZ8hfrLrhl2rOY5?usp=sharing)).
114 |
115 | You can find our planned agenda (including when you have time to present yourselves) on our meetup page: {EVENT MEETUP PAGE}
116 |
117 | Best wishes & thank you again for your support,
118 | {PYLADY} & the Berlin PyLadies :woman_technologist::snake:
119 |
120 | ---
121 |
122 |
123 | ## Sponsor thank you email
124 |
125 |
126 | ---
--------------------------------------------------------------------------------
/organizing/sub_pages/templates/meetup_template.md:
--------------------------------------------------------------------------------
1 | # Meetup Template
2 |
3 | You can copy the draft event found [here](https://www.meetup.com/pyladies-berlin/events/279950871) or copy the text below into a new event.
4 |
5 | - [] Remember to update the date, time & location
6 | - [] Give the meetup a catchy but relevant title
7 | - [] Make it clear if the event is online, in person or hybrid
8 | - [] Add a photo, this could from previous meetups (which we have stored in our [google drive](https://drive.google.com/drive/folders/1aoTzqwDEBTDTXAJaRF9KOWo6PJKDasmk?usp=sharing) - you will need to retrieve access) or something relevant to the topic.
9 | - [] If there is childcare you might want to attach a so people can sign up. ([example form](https://docs.google.com/forms/d/e/1FAIpQLSeMraRbGlXI1uAV1XoTNHrmUBbXGgBTnRbUHOfcCzIj4dcyhw/viewform?usp=share_link) - you will need to retrieve access)
10 | - [] Add the host information
11 | - [] Add additional information for finding the location (ie 3rd floor in hinterhof)
12 | - [] Add necessary COVID-19 safety measures information
13 | - [] Add any requirements from the host, ie that attendees have to register on the door
14 | - [] Set an attendee limit
15 | - [] Ask attendees a question if you need to collect any information before the event
16 | - [] Add yourself as the event host
17 | - [] Is the audience limited? ie is the event for women only
18 |
19 |
20 | ---
21 |
22 |
23 | Hi PyLadies Berlin! In this event we will explore something new and not so often spoken in Python communities: ... 🥳
24 |
25 | 🔊 Introduction to XYZ
26 | You will learn about the basics of ...
27 |
28 | What you will learn:
29 |
30 | ...
31 | ...
32 | This workshop was originally...
33 |
34 | 🚨 Before the Workshop:
35 |
36 | [ ] Follow this tutorial and ...
37 |
38 | [ ] Create a ...
39 |
40 | Didn't work? Do you have too many doubts to set up? No problem. The day before we will be online from 7:30 until 8:30pm to help you.
41 |
42 | 👩💻 Lindsay Germany is a XYZ
43 |
44 | 🦸🏻♀️ 🦹 Non Coding Super Powers is our beloved quick series about everything else, but code, that we need to be nurtured and grown.
45 |
46 | In this meeting: XYZ
47 |
48 | 👩💻 Victoria Berlin is a software developer ...
49 |
50 | Company X is focused on supporting PyLadies! They build software solutions and are hiring, check out their website: example.com
51 |
52 | ---
53 |
54 | 📆 Agenda
55 | 19h00 Community Announcements
56 | 19h10 Non Coding Super Power talk
57 | 19h20 10 Minutes Break
58 | 19h30 Introduction to XYZ
59 | 21h30 See You Next Time! :D
60 |
61 | ---
62 | • By attending our online event, you agree to the PyLadies Code of Conduct: https://www.pyladies.com/CodeOfConduct/
63 |
64 | • Contact
65 | Interested in speaking at one of our events? Have a good idea for a Meetup? Get in touch with us at berlin@pyladies.com
66 |
67 | Find us on the PyLadies Global workspace:
68 |
69 | https://slackin.pyladies.com enter your email address.
70 | Accept the email invitation
71 | Go to workspace https://pyladies.slack.com
72 | Join channel #city-berlin, #germany, #jobs-europe
73 |
74 | ---
--------------------------------------------------------------------------------
/organizing/sub_pages/templates/social_media_templates.md:
--------------------------------------------------------------------------------
1 | # Social Media Templates
2 |
3 |
4 |
5 | ## Twitter
6 |
7 | ***Note that currently all tweets will also be posted in the slack channel #city-berlin and to our Facebook group.***
8 |
9 | These are examples of tweets used for the below purposes to give you inspiration and guidance but feel free to adjust them :D
10 |
11 | TODO add tweet examples
12 |
13 | ### Announcing an event on Twitter
14 |
15 | ### Tweet for shortly before event
16 |
17 | ### Tweet during an event
18 |
19 |
20 | ### Tweet after an event
21 |
22 | ### Tweet to thank sponsors
23 |
24 |
25 |
26 | ## LinkedIn
27 |
28 | TODO
29 |
30 | ## Instagram
31 |
32 | TODO
--------------------------------------------------------------------------------
/questions.md:
--------------------------------------------------------------------------------
1 | # Questions
2 |
3 | ## How do I use slack?
4 | First you need an invitation, and you can get one
5 | [here](https://pyladies-berlin.herokuapp.com/).
6 | Then you will be able to login using this link:
7 | [pyladiesberlin.slack.com](http://pyladiesberlin.slack.com/).
8 |
9 | ## What do I need to execute Python?
10 | You just need to install it!
11 |
12 | This process will depend in your system:
13 | * `Windows`:
14 | * Download the installer from [here](https://www.python.org/downloads/).
15 | * `macOS`:
16 | * Download the installer from [here](https://www.python.org/downloads/).
17 | * You also can use [brew](https://brew.sh/) to [install it](https://docs.brew.sh/Homebrew-and-Python)
18 | * `Linux`: Use your package manager:
19 | * Ubuntu: `sudo apt-get install python3`
20 | * Fedora: `sudo dnf install python3`
21 | * Arch linux: `sudo pacman -S python`
22 |
23 | ## What is the difference between Python 2 and Python 3?
24 | Python2 is the devil, and Python3 is the best...
25 | OK, for real now... Python2 is the old version of python,
26 | many things are being improved and changed in Python3.
27 |
28 | One of main differences is the `print` function:
29 | * In Python2 you write: `print "Hello World!"`
30 | * In Python3 you write: `print("Hello World!")`
31 |
32 | Besides this little example, you have more differences, so be aware
33 | when using one of the other.
34 |
35 | ## What is a terminal?
36 | A terminal is a different way of go through and use your computer, but
37 | since it was a bit complicated to write everything, we started to use
38 | interfaces with folders, clicks, etc.
39 |
40 | Terminals will be different in each platform, so here we will cover
41 | just a few:
42 |
43 | **Windows**:
44 | * cmd: Default terminal for Windows.
45 | * PowerShell: It is an [improved terminal for windows](https://github.com/powershell/powershell).
46 | (Comes with [Visual Studio Code](https://code.visualstudio.com/))
47 | but you can install it without if you want.
48 | * Git Bash: Comes when you install [Git on Windows](https://git-scm.com/download/win)
49 |
50 | **macOS**:
51 | * Terminal: The normal terminal that comes with macOS.
52 | * iTerm2: It's an [improved terminal for macOS](https://iterm2.com/),
53 | including features like splitting windows, search, autocomplete, etc.
54 |
55 | **Linux**:
56 | * Any will work almost the same, so don't worry much about it.
57 |
58 | ## How do navigate through the Terminal?
59 | There are many commands to achieve everything on the terminal,
60 | but you can concentrate in a few that can get you started:
61 |
62 | * Changing directories/folders: `cd`
63 | * e.g.: `cd Desktop/` will take us to the Desktop directory.
64 | * Listing the files of the current directory `dir` (Powershell, cmd),
65 | `ls` (Linux, macOS, and Git Bash on Windows):
66 | * When python is in the PATH, you can just type:
67 | `python my_script.py`
68 |
69 | ## What is an IDE?
70 | It is an [Integrated Development Environment](https://en.wikipedia.org/wiki/Integrated_development_environment),
71 | this means that it's a nice application that provide you with all the tools
72 | to be able to write and execute code:
73 | * You often will have an Editor, from which you can modify your code,
74 | * A terminal, from where you can execute your code,
75 | * A file manager, to open more files or directories.
76 |
77 | ## Which IDE can I use to develop a Python application?
78 | There are many out there, among them (in no particular priority order):
79 | * [Visual Studio Code](https://code.visualstudio.com/)
80 | * [PyCharm](https://www.jetbrains.com/pycharm/)
81 | * [Thonny](https://thonny.org/)
82 | * [Spyder](https://www.spyder-ide.org/)
83 |
84 | ## What is Jupyter?
85 |
86 | The [Jupyter notebook](https://jupyter.org/) is a web application
87 | that allows you to create document that contain code, visualizations,
88 | documentations, and more!.
89 |
90 | The main idea is to get a ready-to-use environment to solve problem
91 | related to simulations, statistical modeling, data analysis, machine
92 | learning, etc.
93 |
94 | ## What is Anaconda?
95 |
96 | [Anaconda](https://www.anaconda.com/) is a distribution of Python and R
97 | that comes with many features focus on scientific programming.
98 |
99 | You can think of Anaconda of a "special Python flavor" that comes with
100 | many extra features.
101 |
102 | One of the most important things is that Anaconda comes with a command
103 | called `conda` from which you can manage different environments, packages,
104 | and much more.
105 |
106 | ## What is Pandas?
107 |
108 | [Pandas](https://pandas.pydata.org/) is a python module that provide a
109 | way to use labeled data structures to perform high performance analysis.
110 |
--------------------------------------------------------------------------------
/workshops/0_installation_party/README.md:
--------------------------------------------------------------------------------
1 | # Getting started - setting up your machine
2 |
3 | Our goal is to get you set up with the base things you will need to participate in our other workshops.
4 |
5 | 🔊 In short you will learn the following:
6 |
7 | - How to [install Python](#installing-python)
8 | - How to [set up a virtual environment](#setting-up-virtual-environments)
9 | - [Install an IDE](#setting-up-a-code-editor-ide), what it is and why we use one
10 | - [Install Git](#installing-git) and [connect to GitHub](#getting-started---setting-up-your-machine) so you can start pushing and pulling code
11 | - [Put it all together and clone this repository](#putting-it-all-together)
12 |
13 | 🚨 Before you continue you will need the following:
14 |
15 | - a free [github account](https://github.com/signup) *requires an email and name*
16 | - a computer on which you have permission to install new software
17 |
18 | ## Installing Python
19 |
20 | First!
21 | Check if you already have python installed by writing the following in a terminal:
22 |
23 | ```sh
24 | python --version
25 | ```
26 |
27 | Linux and macOS users might be familiar with terminals, if you are using windows you
28 | can try executing `cmd` from your applications, it should open a black window
29 | where you can write.
30 |
31 | If you see the following output then you already have python installed and don’t need to do anything:
32 |
33 | ```sh
34 | Python 3.x.x
35 | ```
36 |
37 | Other wise follow [these](https://tutorial.djangogirls.org/en/installation/#python) instructions.
38 |
39 | > **Note**
40 | > If the version is below 3.8.x then you will need to upgrade the version.
41 | > You can read about managing multiple python versions [here](https://github.com/pyenv/pyenv#simple-python-version-management-pyenv).
42 |
43 |
44 | ## Setting up Virtual environments
45 |
46 | Virtual environments are isolated spaces on your computer where you can run your code and install libraries without affecting the rest of your machine's setup. We recommend setting up [python venv](https://docs.python.org/3/library/venv.html). You will see that there are many ways to create these, and even with different options, the idea of using `venv` is because it's included with Python already.
47 |
48 | Convention is to create a new one for each project to help avoid conflicts with other installations. Virtual environments are easy to delete and rebuild in case of errors. [Read more](https://realpython.com/python-virtual-environments-a-primer/).
49 |
50 | ## Setting up a Code editor (IDE)
51 |
52 | There are many code editors and IDEs (Integrated Development Environment), which one you choose to use for viewing, editing, updating, running and debugging your code is up to you.
53 | We recommend using [Visual Studio Code (VSC)](https://code.visualstudio.com) because it is popular among professional programmers, offers multiple languages support and is free to use. [Read more](https://realpython.com/python-ides-code-editors-guide/).
54 |
55 | In case you prefer to install another IDE, it's totally fine, and at the end
56 | will depend of your taste.
57 |
58 | ## Installing Git
59 |
60 | Git is a version control system which allows us to track changes in computer files. Files saved in Git can be "rewound" to find previous versions, which can be very useful when debugging!
61 |
62 | First!
63 | Check if you already have git installed, open your terminal and run:
64 |
65 | ```sh
66 | git --version
67 | ```
68 |
69 | If you see the following output then you already have git installed and don’t need to do anything:
70 |
71 | ```sh
72 | git version 2.x.x
73 | ```
74 |
75 | Otherwise follow [these instructions](https://github.com/git-guides/install-git).
76 |
77 | ## Connecting with GitHub
78 |
79 | [GitHub](https//github.com) is a website and hosting service for our projects, connected with git. You will need to [sign up](https://github.com/join) for an account, if you have not already. We will use it to store our code. It also allows us to collaborate with others and can be used to showcase your work.
80 |
81 | Setting up ssh. When you connect your local machine to GitHub it is easiest to set it up with a ssh connection. This is a security key that will sit on your machine and GitHub will check for it when you want to pull or push code between your local machine and the GitHub server. If you don't set this up you will be required to log in via the terminal each time you want to interact with the server.
82 |
83 | ## Putting it all together
84 |
85 | Once you have all these things set up (please ask coaches if you are at a setup event or reach out on slack if you need support) we have a small challenge for you to test the setup has been done correctly, this will also ensure you are ready for future PyLadies workshops *(though note some of them may require more than this base setup to be completed before attending)*.
86 |
87 | ### Your challenge
88 |
89 | - Use GitHub to fork this repository
90 | - Clone your fork to local machine using Git
91 |
92 | ```sh
93 | git clone git@github.com:YOUR_USERNAME/resources
94 | ```
95 | replacing `YOUR_USERNAME` by your Github username.
96 | - Open the code in your code editor (for further steps you *can* use the terminal in your IDE)
97 | - Create a virtual environment for this project with Python's `venv`
98 |
99 | Linux & Mac OS
100 | ```sh
101 | # create your virtual environment
102 | python -m venv venv
103 | # activate it
104 | source venv/bin/activate
105 |
106 | ```
107 |
108 | Windows
109 | ```sh
110 | # create your virtual environment
111 | python -m venv venv
112 | # activate it on `cmd`
113 | venv\Scripts\activate
114 | # OR activate it on `PowerShell`
115 | . .\venv\Scripts\activate.ps1
116 | ```
117 | - Update the code in [test_script.py](README.md) with your name/nickname/twitter handle
118 | - Run the script with Python using the following command
119 |
120 | ```sh
121 | # you need run this from within this directory
122 | cd workshops/0_installation_party/
123 | python test_script.py
124 | ```
125 | - Confirm the output contains your given name
126 | - Commit your change using git
127 |
128 | ```sh
129 | git commit -m 'updated with my name'
130 | ```
131 | - Push your change using git
132 |
133 | ```sh
134 | git push
135 | ```
136 | - Confirm that your changes are visible on GitHub *(on your fork)*
137 | - Celebrate - you are now finished with the set up! 🎉
138 |
139 | ## Further reading and resources
140 |
141 | - [Git and GitHub Tutorial For Beginners | Full Course [2021] [NEW]](https://www.youtube.com/watch?v=3fUbBnN_H2c)
142 | - [Introduction to Version Control and Git](http://tutorials.codebar.io/version-control/introduction/tutorial.html) by [CodeBar](https://codebar.io/)
143 |
--------------------------------------------------------------------------------
/workshops/0_installation_party/test_script.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 |
3 | YOUR_NAME = "change this to your name"
4 |
5 | print(f'Congratulations {YOUR_NAME}! You have completed the set up! 🎉')
--------------------------------------------------------------------------------
/workshops/10_pandas_intro/README.md:
--------------------------------------------------------------------------------
1 | # Pandas Intro
2 | ## Speaker: freestyle hands-on session
3 |
4 | Link to exercises: https://bitbucket.org/hrojas/learn-pandas
5 |
--------------------------------------------------------------------------------
/workshops/11_building_a_small_web_app_using_mvc_patterns/README.md:
--------------------------------------------------------------------------------
1 | # Building a small web app using MVC patterns
2 | ## Speaker: Samuel Fuentes
3 |
4 | Link to materials: http://www.slideshare.net/samufuentes/how-to-build-a-small-web-app-mvc-pattern (or see as pdf here)
5 |
6 | Link to exercises: http://opentechschool.github.io/python-flask/
7 |
8 | Link to more advanced tutorial: http://flask.pocoo.org/docs/tutorial/
9 |
--------------------------------------------------------------------------------
/workshops/11_building_a_small_web_app_using_mvc_patterns/slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/11_building_a_small_web_app_using_mvc_patterns/slides.pdf
--------------------------------------------------------------------------------
/workshops/12_how_to_write_pythonic_code/README.md:
--------------------------------------------------------------------------------
1 | # Writing pythonic code
2 | ## Speaker: Mei Li Triantafyllidi
3 |
4 | Link to materials: http://slides.com/meilitriantafyllidi/be-more-pythonic
5 |
6 | Link to exercises: http://exercism.io/
7 |
8 | Link to ipython notepad: http://nbviewer.ipython.org/gist/mei-li/aba45adf4bc0e4183a61
9 |
--------------------------------------------------------------------------------
/workshops/13_fun_games/README.md:
--------------------------------------------------------------------------------
1 | # Writing fun games in Python
2 |
3 | ## Speaker: Guillermo Aguilar
4 |
5 | Tutorial: https://github.com/guillermoaguilar/pyglet_tutorial
6 | Youtube clip: https://www.youtube.com/watch?v=wrWwD6DcSIs
7 |
--------------------------------------------------------------------------------
/workshops/14_coding_alg_to_win/README.md:
--------------------------------------------------------------------------------
1 | # Coding algorithms to win
2 |
3 | ## Speaker: Rike-Benjamin Schuppner
4 |
5 | Slides: https://speakerdeck.com/debilski/pelita-coding-algorithms-to-win-at-pyladies-berlin-2014
6 | Youtube clip: https://www.youtube.com/watch?v=AD1cSBCEUzA
7 |
--------------------------------------------------------------------------------
/workshops/15_microservices/README.md:
--------------------------------------------------------------------------------
1 | # Writing (micro)services in Python
2 |
3 | ## Max Brauer
4 |
5 | Materials: [git.io/vvfjv](git.io/vvfjv)
6 |
--------------------------------------------------------------------------------
/workshops/16_rest_apis/README.md:
--------------------------------------------------------------------------------
1 | # Introduction to RESTful APIs
2 |
3 | ## Speaker: Mikhail Chernykh
4 |
5 | Slides: http://netme.github.io/presentations/pyladies20150512/#/title-slide
6 | Repo: https://github.com/netme/pyladies-restful/tree/bookstore-django-project/bookstore
7 |
--------------------------------------------------------------------------------
/workshops/17_blender_solar_system_modelling/README.md:
--------------------------------------------------------------------------------
1 | # Solar system modelling - 3D graphics with Blender
2 |
3 | ## Speaker: Kristin Riebe
4 |
5 | Material: http://kristinriebe.github.io/solarsystem-workshop/
6 | Slides: http://kristinriebe.github.io/solarsystem-workshop/slideshow
7 | http://kristinriebe.github.io/solarsystem-workshop/slideshow/blender-solarsystem.pdf
8 |
--------------------------------------------------------------------------------
/workshops/18_git_and_github/README.md:
--------------------------------------------------------------------------------
1 | ## Git and GitHub in Pyladies Berlin
2 |
3 | ### Speakers: Betty Kalogeropoulou and Luminita Lazarescu
4 |
5 | Presentation: http://lluminita.github.io/pyladies-git-presentation/
6 |
--------------------------------------------------------------------------------
/workshops/18_git_and_github/slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/18_git_and_github/slides.pdf
--------------------------------------------------------------------------------
/workshops/19_Telegram_Bots/readme.txt:
--------------------------------------------------------------------------------
1 | This is the repo for Telegram Bots
2 |
3 |
4 | The presentation is
5 |
6 | https://docs.google.com/presentation/d/1pQv5Z8bJ8Ez7Avh5e4XQPx7962BepTjLszyTbcVzhxQ/edit#slide=id.g1db9ab93bd_0_50
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/workshops/1_introduction_to_programming_with_python/README.md:
--------------------------------------------------------------------------------
1 | # Introduction to programming with Python
2 | ## Speaker: Klara Holzmann
3 |
4 | Link to materials: http://opentechschool.github.io/python-beginners/
5 |
--------------------------------------------------------------------------------
/workshops/20_python_beginners_workshop/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .git
--------------------------------------------------------------------------------
/workshops/20_python_beginners_workshop/README.md:
--------------------------------------------------------------------------------
1 | # PyLadies event
2 |
3 | Meetup Page:
4 | [https://www.meetup.com/de-DE/PyLadies-Berlin/events/243202510/](https://www.meetup.com/de-DE/PyLadies-Berlin/events/243202510/)
5 |
6 | # Blogpost
7 | [http://danke.fish/how-to-organise-a-python-beginners-workshop/](http://danke.fish/how-to-organise-a-python-beginners-workshop/)
8 |
9 |
10 | ## Workshop
11 |
12 | [https://github.com/PyLadiesBerlin/python-beginners-workshop](https://github.com/PyLadiesBerlin/python-beginners-workshop)
13 |
14 |
15 | ## Notes from previous workshops
16 |
17 | This workshop was done twice so far. Initial workshop by Marie and Ines ([initial material](slides)) Some comments to take into account for future workshops:
18 | * In the first case there was an evening for installation that included setup of github, git and github Desktop.
19 | [Installation party](slides/InstallationParty.pdf). Terms like repository and commit, etc where explained in that session and again in the workshop.
20 | * In the 2nd, there was no installation party but the attendees had to install beforehand Python, Pycharm, Git and have a Github account.
21 | The process to commit and the terms repository etc were introduced directly in the workshop and the attendees had to commit and push manually. Much more time and effort would be needed to properly get this working.
22 | * In the first case the tasks where explained in detail by the tutor first, only 12 attendees and it worked pretty well.
23 | In the 2nd the idea was to have the exercises self explained so each person could make them in their own pace. It proved to
24 | be pretty hard to make them very clear.
25 |
26 | ### Lessons learned
27 |
28 | * Either git and github has to be skipped from the workshop or use a separate setup session
29 | and consider a GUI interface, for commit and push. Show graphically a commit to make its
30 | value visible.
31 | * Installation can better work in small groups and needs many coaches. Maybe better to ask participants to pre-install
32 | python and oter tools and then do a pre-workshop session for git and test environments and fix issues.
33 | * For the tasks, the instructions have to be very clearly written (will be revised soon) and they seem best to
34 | be explained by the tutor as well.
35 | * Space has to be well aired and it is advised to have full break where participants go outside and walk.
36 | * Doing the workshop with many people is challenging, a microphone might be needed and should be properly tested
37 | and also prepare for very big fonts in the IDE/console.
38 | * Many friendly and floating coaches made it possible to scale the workshop to many participants 40+, with
39 | really great results!
40 |
41 |
--------------------------------------------------------------------------------
/workshops/20_python_beginners_workshop/slides/InstallationParty.odp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/20_python_beginners_workshop/slides/InstallationParty.odp
--------------------------------------------------------------------------------
/workshops/20_python_beginners_workshop/slides/InstallationParty.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/20_python_beginners_workshop/slides/InstallationParty.pdf
--------------------------------------------------------------------------------
/workshops/20_python_beginners_workshop/slides/InstallationParty.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/20_python_beginners_workshop/slides/InstallationParty.pptx
--------------------------------------------------------------------------------
/workshops/20_python_beginners_workshop/slides/PythonBeginnersWorkshop.odp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/20_python_beginners_workshop/slides/PythonBeginnersWorkshop.odp
--------------------------------------------------------------------------------
/workshops/20_python_beginners_workshop/slides/PythonBeginnersWorkshop.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/20_python_beginners_workshop/slides/PythonBeginnersWorkshop.pdf
--------------------------------------------------------------------------------
/workshops/20_python_beginners_workshop/slides/PythonBeginnersWorkshop.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/20_python_beginners_workshop/slides/PythonBeginnersWorkshop.pptx
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/IoT_workshop_pyladiesBerlin.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/21_Micro_Python_IoT_Workshop/IoT_workshop_pyladiesBerlin.pdf
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTI/0_script.rst:
--------------------------------------------------------------------------------
1 | Running your first script
2 | =========================
3 |
4 | Let's jump right in and get a Python script running on the pyboard. After
5 | all, that's what it's all about!
6 |
7 | Connecting your pyboard
8 | -----------------------
9 |
10 | Connect your pyboard to your PC (Windows, Mac or Linux) with a micro USB cable.
11 | There is only one way that the cable will connect, so you can't get it wrong.
12 |
13 | .. image:: img/pyboard_usb_micro.jpg
14 |
15 | When the pyboard is connected to your PC it will power on and enter the start up
16 | process (the boot process). The green LED should light up for half a second or
17 | less, and when it turns off it means the boot process has completed.
18 |
19 | Opening the pyboard USB drive
20 | -----------------------------
21 |
22 | Your PC should now recognise the pyboard. It depends on the type of PC you
23 | have as to what happens next:
24 |
25 | - **Windows**: Your pyboard will appear as a removable USB flash drive.
26 | Windows may automatically pop-up a window, or you may need to go there
27 | using Explorer.
28 |
29 | Windows will also see that the pyboard has a serial device, and it will
30 | try to automatically configure this device. If it does, cancel the process.
31 | We will get the serial device working in the next tutorial.
32 |
33 | - **Mac**: Your pyboard will appear on the desktop as a removable disc.
34 | It will probably be called "NONAME". Click on it to open the pyboard folder.
35 |
36 | - **Linux**: Your pyboard will appear as a removable medium. On Ubuntu
37 | it will mount automatically and pop-up a window with the pyboard folder.
38 | On other Linux distributions, the pyboard may be mounted automatically,
39 | or you may need to do it manually. At a terminal command line, type ``lsblk``
40 | to see a list of connected drives, and then ``mount /dev/sdb1`` (replace ``sdb1``
41 | with the appropriate device). You may need to be root to do this.
42 |
43 | Okay, so you should now have the pyboard connected as a USB flash drive, and
44 | a window (or command line) should be showing the files on the pyboard drive.
45 |
46 | The drive you are looking at is known as ``/flash`` by the pyboard, and should contain
47 | the following 4 files:
48 |
49 | * `boot.py `_ -- this script is executed when the pyboard boots up. It sets
50 | up various configuration options for the pyboard.
51 |
52 | * `main.py `_ -- this is the main script that will contain your Python program.
53 | It is executed after ``boot.py``.
54 |
55 | * `README.txt `_ -- this contains some very basic information about getting
56 | started with the pyboard.
57 |
58 | * `pybcdc.inf `_ -- this is a Windows driver file to configure the serial USB
59 | device. More about this in the next tutorial.
60 |
61 | Editing ``main.py``
62 | -------------------
63 |
64 | Now we are going to write our Python program, so open the ``main.py``
65 | file in a text editor. On Windows you can use notepad, or any other editor.
66 | On Mac and Linux, use your favourite text editor. With the file open you will
67 | see it contains 1 line
68 |
69 | .. code-block:: python
70 |
71 | # main.py -- put your code here!
72 |
73 | This line starts with a # character, which means that it is a *comment*. Such
74 | lines will not do anything, and are there for you to write notes about your
75 | program.
76 |
77 | Let's add 2 lines to this ``main.py`` file, to make it look like this
78 |
79 | .. code-block:: python
80 |
81 | # main.py -- put your code here!
82 | import pyb
83 | pyb.LED(4).on()
84 |
85 | The first line we wrote says that we want to use the ``pyb`` module.
86 | This module contains all the functions and classes to control the features
87 | of the pyboard.
88 |
89 | The second line that we wrote turns the blue LED on: it first gets the ``LED``
90 | class from the ``pyb`` module, creates LED number 4 (the blue LED), and then
91 | turns it on.
92 |
93 | Resetting the pyboard
94 | ---------------------
95 |
96 | To run this little script, you need to first save and close the ``main.py`` file,
97 | and then eject (or unmount) the pyboard USB drive. Do this like you would a
98 | normal USB flash drive.
99 |
100 | When the drive is safely ejected/unmounted you can get to the fun part:
101 | press the RST switch on the pyboard to reset and run your script. The RST
102 | switch is the small black button just below the USB connector on the board,
103 | on the right edge.
104 |
105 | When you press RST the green LED will flash quickly, and then the blue
106 | LED should turn on and stay on.
107 |
108 | Congratulations! You have written and run your very first MicroPython
109 | program!
110 |
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTI/1_intro.rst:
--------------------------------------------------------------------------------
1 | Introduction to the pyboard
2 | ===========================
3 |
4 | To get the most out of your pyboard, there are a few basic things to
5 | understand about how it works.
6 |
7 | Caring for your pyboard
8 | -----------------------
9 |
10 | Because the pyboard does not have a housing it needs a bit of care:
11 |
12 | - Be gentle when plugging/unplugging the USB cable. Whilst the USB connector
13 | is soldered through the board and is relatively strong, if it breaks off
14 | it can be very difficult to fix.
15 |
16 | - Static electricity can shock the components on the pyboard and destroy them.
17 | If you experience a lot of static electricity in your area (eg dry and cold
18 | climates), take extra care not to shock the pyboard. If your pyboard came
19 | in a black plastic box, then this box is the best way to store and carry the
20 | pyboard as it is an anti-static box (it is made of a conductive plastic, with
21 | conductive foam inside).
22 |
23 | As long as you take care of the hardware, you should be okay. It's almost
24 | impossible to break the software on the pyboard, so feel free to play around
25 | with writing code as much as you like. If the filesystem gets corrupt, see
26 | below on how to reset it. In the worst case you might need to reflash the
27 | MicroPython software, but that can be done over USB.
28 |
29 | Layout of the pyboard
30 | ---------------------
31 |
32 | The micro USB connector is on the top right, the micro SD card slot on
33 | the top left of the board. There are 4 LEDs between the SD slot and
34 | USB connector. The colours are: red on the bottom, then green, orange,
35 | and blue on the top. There are 2 switches: the right one is the reset
36 | switch, the left is the user switch.
37 |
38 | Plugging in and powering on
39 | ---------------------------
40 |
41 | The pyboard can be powered via USB. Connect it to your PC via a micro USB
42 | cable. There is only one way that the cable will fit. Once connected,
43 | the green LED on the board should flash quickly.
44 |
45 | Powering by an external power source
46 | ------------------------------------
47 |
48 | The pyboard can be powered by a battery or other external power source.
49 |
50 | **Be sure to connect the positive lead of the power supply to VIN, and
51 | ground to GND. There is no polarity protection on the pyboard so you
52 | must be careful when connecting anything to VIN.**
53 |
54 | **The input voltage must be between 3.6V and 10V.**
55 |
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTI/2_reset.rst:
--------------------------------------------------------------------------------
1 | Safe mode and factory reset
2 | ===========================
3 |
4 | If something goes wrong with your pyboard, don't panic! It is almost
5 | impossible for you to break the pyboard by programming the wrong thing.
6 |
7 | The first thing to try is to enter safe mode: this temporarily skips
8 | execution of ``boot.py`` and ``main.py`` and gives default USB settings.
9 |
10 | If you have problems with the filesystem you can do a factory reset,
11 | which restores the filesystem to its original state.
12 |
13 | Safe mode
14 | ---------
15 |
16 | To enter safe mode, do the following steps:
17 |
18 | 1. Connect the pyboard to USB so it powers up.
19 | 2. Hold down the USR switch.
20 | 3. While still holding down USR, press and release the RST switch.
21 | 4. The LEDs will then cycle green to orange to green+orange and back again.
22 | 5. Keep holding down USR until *only the orange LED is lit*, and then let
23 | go of the USR switch.
24 | 6. The orange LED should flash quickly 4 times, and then turn off.
25 | 7. You are now in safe mode.
26 |
27 | In safe mode, the ``boot.py`` and ``main.py`` files are not executed, and so
28 | the pyboard boots up with default settings. This means you now have access
29 | to the filesystem (the USB drive should appear), and you can edit ``boot.py``
30 | and ``main.py`` to fix any problems.
31 |
32 | Entering safe mode is temporary, and does not make any changes to the
33 | files on the pyboard.
34 |
35 | Factory reset the filesystem
36 | ----------------------------
37 |
38 | If you pyboard's filesystem gets corrupted (for example, you forgot to
39 | eject/unmount it), or you have some code in ``boot.py`` or ``main.py`` which
40 | you can't escape from, then you can reset the filesystem.
41 |
42 | Resetting the filesystem deletes all files on the internal pyboard storage
43 | (not the SD card), and restores the files ``boot.py``, ``main.py``, ``README.txt``
44 | and ``pybcdc.inf`` back to their original state.
45 |
46 | To do a factory reset of the filesystem you follow a similar procedure as
47 | you did to enter safe mode, but release USR on green+orange:
48 |
49 | 1. Connect the pyboard to USB so it powers up.
50 | 2. Hold down the USR switch.
51 | 3. While still holding down USR, press and release the RST switch.
52 | 4. The LEDs will then cycle green to orange to green+orange and back again.
53 | 5. Keep holding down USR until *both the green and orange LEDs are lit*, and
54 | then let go of the USR switch.
55 | 6. The green and orange LEDs should flash quickly 4 times.
56 | 7. The red LED will turn on (so red, green and orange are now on).
57 | 8. The pyboard is now resetting the filesystem (this takes a few seconds).
58 | 9. The LEDs all turn off.
59 | 10. You now have a reset filesystem, and are in safe mode.
60 | 11. Press and release the RST switch to boot normally.
61 |
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTI/3_repl.rst:
--------------------------------------------------------------------------------
1 | Getting a MicroPython REPL prompt
2 | =================================
3 |
4 | REPL stands for Read Evaluate Print Loop, and is the name given to the
5 | interactive MicroPython prompt that you can access on the pyboard. Using
6 | the REPL is by far the easiest way to test out your code and run commands.
7 | You can use the REPL in addition to writing scripts in ``main.py``.
8 |
9 | To use the REPL, you must connect to the serial USB device on the pyboard.
10 | How you do this depends on your operating system.
11 |
12 | Windows
13 | -------
14 |
15 | You need to install the pyboard driver to use the serial USB device.
16 | The driver is on the pyboard's USB flash drive, and is called ``pybcdc.inf``.
17 |
18 | To install this driver you need to go to Device Manager
19 | for your computer, find the pyboard in the list of devices (it should have
20 | a warning sign next to it because it's not working yet), right click on
21 | the pyboard device, select Properties, then Install Driver. You need to
22 | then select the option to find the driver manually (don't use Windows auto update),
23 | navigate to the pyboard's USB drive, and select that. It should then install.
24 | After installing, go back to the Device Manager to find the installed pyboard,
25 | and see which COM port it is (eg COM4).
26 | More comprehensive instructions can be found in the
27 | `Guide for pyboard on Windows (PDF) `_.
28 | Please consult this guide if you are having problems installing the driver.
29 |
30 | You now need to run your terminal program. You can use HyperTerminal if you
31 | have it installed, or download the free program PuTTY:
32 | `putty.exe `_.
33 | Using your serial program you must connect to the COM port that you found in the
34 | previous step. With PuTTY, click on "Session" in the left-hand panel, then click
35 | the "Serial" radio button on the right, then enter you COM port (eg COM4) in the
36 | "Serial Line" box. Finally, click the "Open" button.
37 |
38 | Mac OS X
39 | --------
40 |
41 | Open a terminal and run
42 |
43 | .. code-block:: python
44 |
45 | screen /dev/tty.usbmodem*
46 |
47 | When you are finished and want to exit screen, type CTRL-A CTRL-\\.
48 |
49 | Linux
50 | -----
51 |
52 | Open a terminal and run::
53 |
54 | screen /dev/ttyACM0
55 |
56 | You can also try ``picocom`` or ``minicom`` instead of screen. You may have to
57 | use ``/dev/ttyACM1`` or a higher number for ``ttyACM``. And, you may need to give
58 | yourself the correct permissions to access this devices (eg group ``uucp`` or ``dialout``,
59 | or use sudo).
60 |
61 | Using the REPL prompt
62 | ---------------------
63 |
64 | Now let's try running some MicroPython code directly on the pyboard.
65 |
66 | With your serial program open (PuTTY, screen, picocom, etc) you may see a blank
67 | screen with a flashing cursor. Press Enter and you should be presented with a
68 | MicroPython prompt, i.e. ``>>>``. Let's make sure it is working with the obligatory test
69 |
70 | .. code-block:: python
71 |
72 | >>> print("hello pyboard!")
73 | hello pyboard!
74 |
75 | In the above, you should not type in the ``>>>`` characters. They are there to
76 | indicate that you should type the text after it at the prompt. In the end, once
77 | you have entered the text ``print("hello pyboard!")`` and pressed Enter, the output
78 | on your screen should look like it does above.
79 |
80 | If you already know some python you can now try some basic commands here.
81 |
82 | If any of this is not working you can try either a hard reset or a soft reset;
83 | see below.
84 |
85 | Go ahead and try typing in some other commands. For example
86 |
87 | .. code-block:: python
88 |
89 | >>> pyb.LED(1).on()
90 | >>> pyb.LED(2).on()
91 | >>> 1 + 2
92 | 3
93 | >>> 1 / 2
94 | 0.5
95 | >>> 20 * 'py'
96 | 'pypypypypypypypypypypypypypypypypypypypy'
97 |
98 | Resetting the board
99 | -------------------
100 |
101 | If something goes wrong, you can reset the board in two ways. The first is to press CTRL-D
102 | at the MicroPython prompt, which performs a soft reset. You will see a message something like::
103 |
104 | >>>
105 | PYB: sync filesystems
106 | PYB: soft reboot
107 | Micro Python v1.0 on 2014-05-03; PYBv1.0 with STM32F405RG
108 | Type "help()" for more information.
109 | >>>
110 |
111 | If that isn't working you can perform a hard reset (turn-it-off-and-on-again) by pressing the RST
112 | switch (the small black button closest to the micro-USB socket on the board). This will end your
113 | session, disconnecting whatever program (PuTTY, screen, etc) that you used to connect to the pyboard.
114 |
115 | If you are going to do a hard-reset, it's recommended to first close your serial program and eject/unmount
116 | the pyboard drive.
117 |
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTI/4_leds.rst:
--------------------------------------------------------------------------------
1 | Turning on LEDs and basic Python concepts
2 | =========================================
3 |
4 | The easiest thing to do on the pyboard is to turn on the LEDs attached to the board. Connect the board, and log in as described in tutorial 1. We will start by turning and LED on in the interpreter, type the following
5 |
6 | .. code-block:: python
7 |
8 | >>> myled = pyb.LED(1)
9 | >>> myled.on()
10 | >>> myled.off()
11 |
12 | These commands turn the LED on and off.
13 |
14 | This is all very well but we would like this process to be automated. Open the file MAIN.PY on the pyboard in your favourite text editor. Write or paste the following lines into the file. If you are new to python, then make sure you get the indentation correct since this matters!
15 |
16 | .. code-block:: python
17 |
18 | led = pyb.LED(2)
19 | while True:
20 | led.toggle()
21 | pyb.delay(1000)
22 |
23 | When you save, the red light on the pyboard should turn on for about a second. To run the script, do a soft reset (CTRL-D). The pyboard will then restart and you should see a green light continuously flashing on and off. Success, the first step on your path to building an army of evil robots! When you are bored of the annoying flashing light then press CTRL-C at your terminal to stop it running.
24 |
25 | So what does this code do? First we need some terminology. Python is an object-oriented language, almost everything in python is a *class* and when you create an instance of a class you get an *object*. Classes have *methods* associated to them. A method (also called a member function) is used to interact with or control the object.
26 |
27 | The first line of code creates an LED object which we have then called led. When we create the object, it takes a single parameter which must be between 1 and 4, corresponding to the 4 LEDs on the board. The pyb.LED class has three important member functions that we will use: on(), off() and toggle(). The other function that we use is pyb.delay() this simply waits for a given time in miliseconds. Once we have created the LED object, the statement while True: creates an infinite loop which toggles the led between on and off and waits for 1 second.
28 |
29 | **Exercise: Try changing the time between toggling the led and turning on a different LED.**
30 |
31 | **Exercise: Connect to the pyboard directly, create a pyb.LED object and turn it on using the on() method.**
32 |
33 | A Disco on your pyboard
34 | -----------------------
35 |
36 | So far we have only used a single LED but the pyboard has 4 available. Let's start by creating an object for each LED so we can control each of them. We do that by creating a list of LEDS with a list comprehension.
37 |
38 | .. code-block:: python
39 |
40 | leds = [pyb.LED(i) for i in range(1,5)]
41 |
42 | If you call pyb.LED() with a number that isn't 1,2,3,4 you will get an error message.
43 | Next we will set up an infinite loop that cycles through each of the LEDs turning them on and off.
44 |
45 | .. code-block:: python
46 |
47 | n = 0
48 | while True:
49 | n = (n + 1) % 4
50 | leds[n].toggle()
51 | pyb.delay(50)
52 |
53 | Here, n keeps track of the current LED and every time the loop is executed we cycle to the next n (the % sign is a modulus operator that keeps n between 0 and 3.) Then we access the nth LED and toggle it. If you run this you should see each of the LEDs turning on then all turning off again in sequence.
54 |
55 | One problem you might find is that if you stop the script and then start it again that the LEDs are stuck on from the previous run, ruining our carefully choreographed disco. We can fix this by turning all the LEDs off when we initialise the script and then using a try/finally block. When you press CTRL-C, MicroPython generates a VCPInterrupt exception. Exceptions normally mean something has gone wrong and you can use a try: command to "catch" an exception. In this case it is just the user interrupting the script, so we don't need to catch the error but just tell MicroPython what to do when we exit. The finally block does this, and we use it to make sure all the LEDs are off. The full code is
56 |
57 | .. code-block:: python
58 |
59 | leds = [pyb.LED(i) for i in range(1,5)]
60 | for l in leds:
61 | l.off()
62 |
63 | n = 0
64 | try:
65 | while True:
66 | n = (n + 1) % 4
67 | leds[n].toggle()
68 | pyb.delay(50)
69 | finally:
70 | for l in leds:
71 | l.off()
72 |
73 | The Special LEDs
74 | ----------------
75 |
76 | The yellow and blue LEDs are special. As well as turning them on and off, you can control their intensity using the intensity() method. This takes a number between 0 and 255 that determines how bright it is. The following script makes the blue LED gradually brighter then turns it off again.
77 |
78 | .. code-block:: python
79 |
80 | led = pyb.LED(4)
81 | intensity = 0
82 | while True:
83 | intensity = (intensity + 1) % 255
84 | led.intensity(intensity)
85 | pyb.delay(20)
86 |
87 | You can call intensity() on LEDs 1 and 2 but they can only be off or on. 0 sets them off and any other number up to 255 turns them on.
88 |
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTI/5_switch.rst:
--------------------------------------------------------------------------------
1 | The Switch, callbacks and interrupts
2 | ====================================
3 |
4 | The pyboard has 2 small switches, labelled USR and RST. The RST switch
5 | is a hard-reset switch, and if you press it then it restarts the pyboard
6 | from scratch, equivalent to turning the power off then back on.
7 |
8 | The USR switch is for general use, and is controlled via a Switch object.
9 | To make a switch object do
10 |
11 | .. code-block:: python
12 |
13 | >>> sw = pyb.Switch()
14 |
15 | Remember that you may need to type ``import pyb`` if you get an error that
16 | the name ``pyb`` does not exist.
17 |
18 | With the switch object you can get its status
19 |
20 | .. code-block:: python
21 |
22 | >>> sw.value()
23 | False
24 |
25 | This will print ``False`` if the switch is not held, or ``True`` if it is held.
26 | Try holding the USR switch down while running the above command.
27 |
28 | There is also a shorthand notation to get the switch status, by "calling" the
29 | switch object
30 |
31 | .. code-block:: python
32 |
33 | >>> sw()
34 | False
35 |
36 | Switch callbacks
37 | ----------------
38 |
39 | The switch is a very simple object, but it does have one advanced feature:
40 | the ``sw.callback()`` function. The callback function sets up something to
41 | run when the switch is pressed, and uses an interrupt. It's probably best
42 | to start with an example before understanding how interrupts work. Try
43 | running the following at the prompt
44 |
45 | .. code-block:: python
46 |
47 | >>> sw.callback(lambda:print('press!'))
48 |
49 | This tells the switch to print ``press!`` each time the switch is pressed
50 | down. Go ahead and try it: press the USR switch and watch the output on
51 | your PC. Note that this print will interrupt anything you are typing, and
52 | is an example of an interrupt routine running asynchronously.
53 |
54 | As another example try
55 |
56 | .. code-block:: python
57 |
58 | >>> sw.callback(lambda:pyb.LED(1).toggle())
59 |
60 | This will toggle the red LED each time the switch is pressed. And it will
61 | even work while other code is running.
62 |
63 | To disable the switch callback, pass ``None`` to the callback function
64 |
65 | .. code-block:: python
66 |
67 | >>> sw.callback(None)
68 |
69 | You can pass any function (that takes zero arguments) to the switch callback.
70 | Above we used the ``lambda`` feature of Python to create an anonymous function
71 | on the fly. But we could equally do
72 |
73 | .. code-block:: python
74 |
75 | >>> def f():
76 | ... pyb.LED(1).toggle()
77 | ...
78 | >>> sw.callback(f)
79 |
80 | This creates a function called ``f`` and assigns it to the switch callback.
81 | You can do things this way when your function is more complicated than a
82 | ``lambda`` will allow.
83 |
84 | Note that your callback functions must not allocate any memory (for example
85 | they cannot create a tuple or list). Callback functions should be relatively
86 | simple. If you need to make a list, make it beforehand and store it in a
87 | global variable (or make it local and close over it). If you need to do
88 | a long, complicated calculation, then use the callback to set a flag which
89 | some other code then responds to.
90 |
91 | Technical details of interrupts
92 | -------------------------------
93 |
94 | Let's step through the details of what is happening with the switch
95 | callback. When you register a function with ``sw.callback()``, the switch
96 | sets up an external interrupt trigger (falling edge) on the pin that the
97 | switch is connected to. This means that the microcontroller will listen
98 | on the pin for any changes, and the following will occur:
99 |
100 | 1. When the switch is pressed a change occurs on the pin (the pin goes
101 | from low to high), and the microcontroller registers this change.
102 | 2. The microcontroller finishes executing the current machine instruction,
103 | stops execution, and saves its current state (pushes the registers on
104 | the stack). This has the effect of pausing any code, for example your
105 | running Python script.
106 | 3. The microcontroller starts executing the special interrupt handler
107 | associated with the switch's external trigger. This interrupt handler
108 | get the function that you registered with ``sw.callback()`` and executes
109 | it.
110 | 4. Your callback function is executed until it finishes, returning control
111 | to the switch interrupt handler.
112 | 5. The switch interrupt handler returns, and the microcontroller is
113 | notified that the interrupt has been dealt with.
114 | 6. The microcontroller restores the state that it saved in step 2.
115 | 7. Execution continues of the code that was running at the beginning. Apart
116 | from the pause, this code does not notice that it was interrupted.
117 |
118 | The above sequence of events gets a bit more complicated when multiple
119 | interrupts occur at the same time. In that case, the interrupt with the
120 | highest priority goes first, then the others in order of their priority.
121 | The switch interrupt is set at the lowest priority.
122 |
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTI/6_accel.rst:
--------------------------------------------------------------------------------
1 | The accelerometer
2 | =================
3 |
4 | Here you will learn how to read the accelerometer and signal using LEDs states like tilt left and tilt right.
5 |
6 | Using the accelerometer
7 | -----------------------
8 |
9 | The pyboard has an accelerometer (a tiny mass on a tiny spring) that can be used
10 | to detect the angle of the board and motion. There is a different sensor for
11 | each of the x, y, z directions. To get the value of the accelerometer, create a
12 | pyb.Accel() object and then call the x() method.
13 |
14 | .. code-block:: python
15 |
16 | >>> accel = pyb.Accel()
17 | >>> accel.x()
18 | 7
19 |
20 | This returns a signed integer with a value between around -30 and 30. Note that
21 | the measurement is very noisy, this means that even if you keep the board
22 | perfectly still there will be some variation in the number that you measure.
23 | Because of this, you shouldn't use the exact value of the x() method but see if
24 | it is in a certain range.
25 |
26 | We will start by using the accelerometer to turn on a light if it is not flat.
27 |
28 | .. code-block:: python
29 |
30 | accel = pyb.Accel()
31 | light = pyb.LED(3)
32 | SENSITIVITY = 3
33 |
34 | while True:
35 | x = accel.x()
36 | if abs(x) > SENSITIVITY:
37 | light.on()
38 | else:
39 | light.off()
40 |
41 | pyb.delay(100)
42 |
43 | We create Accel and LED objects, then get the value of the x direction of the
44 | accelerometer. If the magnitude of x is bigger than a certain value ``SENSITIVITY``,
45 | then the LED turns on, otherwise it turns off. The loop has a small ``pyb.delay()``
46 | otherwise the LED flashes annoyingly when the value of x is close to
47 | ``SENSITIVITY``. Try running this on the pyboard and tilt the board left and right
48 | to make the LED turn on and off.
49 |
50 | **Exercise: Change the above script so that the blue LED gets brighter the more
51 | you tilt the pyboard. HINT: You will need to rescale the values, intensity goes
52 | from 0-255.**
53 |
54 | Making a spirit level
55 | ---------------------
56 |
57 | The example above is only sensitive to the angle in the x direction but if we
58 | use the ``y()`` value and more LEDs we can turn the pyboard into a spirit level.
59 |
60 | .. code-block:: python
61 |
62 | xlights = (pyb.LED(2), pyb.LED(3))
63 | ylights = (pyb.LED(1), pyb.LED(4))
64 |
65 | accel = pyb.Accel()
66 | SENSITIVITY = 3
67 |
68 | while True:
69 | x = accel.x()
70 | if x > SENSITIVITY:
71 | xlights[0].on()
72 | xlights[1].off()
73 | elif x < -SENSITIVITY:
74 | xlights[1].on()
75 | xlights[0].off()
76 | else:
77 | xlights[0].off()
78 | xlights[1].off()
79 |
80 | y = accel.y()
81 | if y > SENSITIVITY:
82 | ylights[0].on()
83 | ylights[1].off()
84 | elif y < -SENSITIVITY:
85 | ylights[1].on()
86 | ylights[0].off()
87 | else:
88 | ylights[0].off()
89 | ylights[1].off()
90 |
91 | pyb.delay(100)
92 |
93 | We start by creating a tuple of LED objects for the x and y directions. Tuples
94 | are immutable objects in python which means they can't be modified once they are
95 | created. We then proceed as before but turn on a different LED for positive and
96 | negative x values. We then do the same for the y direction. This isn't
97 | particularly sophisticated but it does the job. Run this on your pyboard and you
98 | should see different LEDs turning on depending on how you tilt the board.
99 |
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTI/7_timer.rst:
--------------------------------------------------------------------------------
1 | The Timers
2 | ==========
3 |
4 | The pyboard has 14 timers which each consist of an independent counter
5 | running at a user-defined frequency. They can be set up to run a function
6 | at specific intervals.
7 | The 14 timers are numbered 1 through 14, but 3 is reserved
8 | for internal use, and 5 and 6 are used for servo and ADC/DAC control.
9 | Avoid using these timers if possible.
10 |
11 | Let's create a timer object
12 |
13 | .. code-block:: python
14 |
15 | >>> tim = pyb.Timer(4)
16 |
17 | Now let's see what we just created
18 |
19 | .. code-block:: python
20 |
21 | >>> tim
22 | Timer(4)
23 |
24 | The pyboard is telling us that ``tim`` is attached to timer number 4, but
25 | it's not yet initialised. So let's initialise it to trigger at 10 Hz
26 | (that's 10 times per second)
27 |
28 | .. code-block:: python
29 |
30 | >>> tim.init(freq=10)
31 |
32 | Now that it's initialised, we can see some information about the timer
33 |
34 | .. code-block:: python
35 |
36 | >>> tim
37 | Timer(4, prescaler=624, period=13439, mode=UP, div=1)
38 |
39 | The information means that this timer is set to run at the peripheral
40 | clock speed divided by 624+1, and it will count from 0 up to 13439, at which
41 | point it triggers an interrupt, and then starts counting again from 0. These
42 | numbers are set to make the timer trigger at 10 Hz: the source frequency
43 | of the timer is 84MHz (found by running ``tim.source_freq()``) so we
44 | get 84MHz / 625 / 13440 = 10Hz.
45 |
46 | Timer counter
47 | -------------
48 |
49 | So what can we do with our timer? The most basic thing is to get the
50 | current value of its counter::
51 |
52 | >>> tim.counter()
53 | 21504
54 |
55 | This counter will continuously change, and counts up.
56 |
57 | Timer callbacks
58 | ---------------
59 |
60 | The next thing we can do is register a callback function for the timer to
61 | execute when it triggers (see the [switch tutorial](tut-switch) for an
62 | introduction to callback functions)::
63 |
64 | >>> tim.callback(lambda t:pyb.LED(1).toggle())
65 |
66 | This should start the red LED flashing right away. It will be flashing
67 | at 5 Hz (2 toggle's are needed for 1 flash, so toggling at 10 Hz makes
68 | it flash at 5 Hz). You can change the frequency by re-initialising the
69 | timer::
70 |
71 | >>> tim.init(freq=20)
72 |
73 | You can disable the callback by passing it the value ``None``::
74 |
75 | >>> tim.callback(None)
76 |
77 | The function that you pass to callback must take 1 argument, which is
78 | the timer object that triggered. This allows you to control the timer
79 | from within the callback function.
80 |
81 | We can create 2 timers and run them independently
82 |
83 | .. code-block:: python
84 |
85 | >>> tim4 = pyb.Timer(4, freq=10)
86 | >>> tim7 = pyb.Timer(7, freq=20)
87 | >>> tim4.callback(lambda t: pyb.LED(1).toggle())
88 | >>> tim7.callback(lambda t: pyb.LED(2).toggle())
89 |
90 | Because the callbacks are proper hardware interrupts, we can continue
91 | to use the pyboard for other things while these timers are running.
92 |
93 | Making a microsecond counter
94 | ----------------------------
95 |
96 | You can use a timer to create a microsecond counter, which might be
97 | useful when you are doing something which requires accurate timing.
98 | We will use timer 2 for this, since timer 2 has a 32-bit counter (so
99 | does timer 5, but if you use timer 5 then you can't use the Servo
100 | driver at the same time).
101 |
102 | We set up timer 2 as follows::
103 |
104 | >>> micros = pyb.Timer(2, prescaler=83, period=0x3fffffff)
105 |
106 | The prescaler is set at 83, which makes this timer count at 1 MHz.
107 | This is because the CPU clock, running at 168 MHz, is divided by
108 | 2 and then by prescaler+1, giving a frequency of 168 MHz/2/(83+1)=1 MHz
109 | for timer 2. The period is set to a large number so that the timer
110 | can count up to a large number before wrapping back around to zero.
111 | In this case it will take about 17 minutes before it cycles back to
112 | zero.
113 |
114 | To use this timer, it's best to first reset it to 0::
115 |
116 | >>> micros.counter(0)
117 |
118 | and then perform your timing::
119 |
120 | >>> start_micros = micros.counter()
121 |
122 | ... do some stuff ...
123 |
124 | >>> end_micros = micros.counter()
125 |
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTI/8_usb_mouse.rst:
--------------------------------------------------------------------------------
1 | Making the pyboard act as a USB mouse
2 | =====================================
3 |
4 | The pyboard is a USB device, and can configured to act as a mouse instead
5 | of the default USB flash drive.
6 |
7 | To do this we must first edit the ``boot.py`` file to change the USB
8 | configuration. If you have not yet touched your ``boot.py`` file then it
9 | will look something like this
10 |
11 | .. code-block:: python
12 |
13 | # boot.py -- run on boot-up
14 | # can run arbitrary Python, but best to keep it minimal
15 |
16 | import pyb
17 | #pyb.main('main.py') # main script to run after this one
18 | #pyb.usb_mode('VCP+MSC') # act as a serial and a storage device
19 | #pyb.usb_mode('VCP+HID') # act as a serial device and a mouse
20 |
21 | To enable the mouse mode, uncomment the last line of the file, to
22 | make it look like
23 |
24 | .. code-block:: python
25 |
26 | pyb.usb_mode('VCP+HID') # act as a serial device and a mouse
27 |
28 | If you already changed your ``boot.py`` file, then the minimum code it
29 | needs to work is
30 |
31 | .. code-block:: python
32 |
33 | import pyb
34 | pyb.usb_mode('VCP+HID')
35 |
36 | This tells the pyboard to configure itself as a VCP (Virtual COM Port,
37 | ie serial port) and HID (human interface device, in our case a mouse)
38 | USB device when it boots up.
39 |
40 | Eject/unmount the pyboard drive and reset it using the RST switch.
41 | Your PC should now detect the pyboard as a mouse!
42 |
43 | Sending mouse events by hand
44 | ----------------------------
45 |
46 | To get the py-mouse to do anything we need to send mouse events to the PC.
47 | We will first do this manually using the REPL prompt. Connect to your
48 | pyboard using your serial program and type the following
49 |
50 | .. code-block:: python
51 |
52 | >>> hid = pyb.USB_HID()
53 | >>> hid.send((0, 10, 0, 0))
54 |
55 | Your mouse should move 10 pixels to the right! In the command above you
56 | are sending 4 pieces of information: button status, x, y and scroll. The
57 | number 10 is telling the PC that the mouse moved 10 pixels in the x direction.
58 |
59 | Let's make the mouse oscillate left and right
60 |
61 | .. code-block:: python
62 |
63 | >>> import math
64 | >>> def osc(n, d):
65 | ... for i in range(n):
66 | ... hid.send((0, int(20 * math.sin(i / 10)), 0, 0))
67 | ... pyb.delay(d)
68 | ...
69 | >>> osc(100, 50)
70 |
71 | The first argument to the function ``osc`` is the number of mouse events to send,
72 | and the second argument is the delay (in milliseconds) between events. Try
73 | playing around with different numbers.
74 |
75 | **Exercise: make the mouse go around in a circle.**
76 |
77 | Making a mouse with the accelerometer
78 | -------------------------------------
79 |
80 | Now lets make the mouse move based on the angle of the pyboard, using the
81 | accelerometer. The following code can be typed directly at the REPL prompt,
82 | or put in the ``main.py`` file. Here, we'll put in in ``main.py`` because to do
83 | that we will learn how to go into safe mode.
84 |
85 | At the moment the pyboard is acting as a serial USB device and an HID (a mouse).
86 | So you cannot access the filesystem to edit your ``main.py`` file.
87 |
88 | You also can't edit your ``boot.py`` to get out of HID-mode and back to normal
89 | mode with a USB drive...
90 |
91 | To get around this we need to go into *safe mode*. This was described in
92 | the [safe mode tutorial](tut-reset), but we repeat the instructions here:
93 |
94 | 1. Hold down the USR switch.
95 | 2. While still holding down USR, press and release the RST switch.
96 | 3. The LEDs will then cycle green to orange to green+orange and back again.
97 | 4. Keep holding down USR until *only the orange LED is lit*, and then let
98 | go of the USR switch.
99 | 5. The orange LED should flash quickly 4 times, and then turn off.
100 | 6. You are now in safe mode.
101 |
102 | In safe mode, the ``boot.py`` and ``main.py`` files are not executed, and so
103 | the pyboard boots up with default settings. This means you now have access
104 | to the filesystem (the USB drive should appear), and you can edit ``main.py``.
105 | (Leave ``boot.py`` as-is, because we still want to go back to HID-mode after
106 | we finish editing ``main.py``.)
107 |
108 | In ``main.py`` put the following code
109 |
110 | .. code-block:: python
111 |
112 | import pyb
113 |
114 | switch = pyb.Switch()
115 | accel = pyb.Accel()
116 | hid = pyb.USB_HID()
117 |
118 | while not switch():
119 | hid.send((0, accel.x(), accel.y(), 0))
120 | pyb.delay(20)
121 |
122 | Save your file, eject/unmount your pyboard drive, and reset it using the RST
123 | switch. It should now act as a mouse, and the angle of the board will move
124 | the mouse around. Try it out, and see if you can make the mouse stand still!
125 |
126 | Press the USR switch to stop the mouse motion.
127 |
128 | You'll note that the y-axis is inverted. That's easy to fix: just put a
129 | minus sign in front of the y-coordinate in the ``hid.send()`` line above.
130 |
131 | Restoring your pyboard to normal
132 | --------------------------------
133 |
134 | If you leave your pyboard as-is, it'll behave as a mouse everytime you plug
135 | it in. You probably want to change it back to normal. To do this you need
136 | to first enter safe mode (see above), and then edit the ``boot.py`` file.
137 | In the ``boot.py`` file, comment out (put a # in front of) the line with the
138 | ``VCP+HID`` setting, so it looks like
139 |
140 | .. code-block:: python
141 |
142 | #pyb.usb_mode('VCP+HID') # act as a serial device and a mouse
143 |
144 | Save your file, eject/unmount the drive, and reset the pyboard. It is now
145 | back to normal operating mode.
146 |
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTI/9_debounce.rst:
--------------------------------------------------------------------------------
1 | Debouncing a pin input
2 | ======================
3 |
4 | A pin used as input from a switch or other mechanical device can have a lot
5 | of noise on it, rapidly changing from low to high when the switch is first
6 | pressed or released. This noise can be eliminated using a capacitor (a
7 | debouncing circuit). It can also be eliminated using a simple function that
8 | makes sure the value on the pin is stable.
9 |
10 | The following function does just this. It gets the current value of the given
11 | pin, and then waits for the value to change. The new pin value must be stable
12 | for a continuous 20ms for it to register the change. You can adjust this time
13 | (to say 50ms) if you still have noise.
14 |
15 | .. code-block:: python
16 |
17 | import pyb
18 |
19 | def wait_pin_change(pin):
20 | # wait for pin to change value
21 | # it needs to be stable for a continuous 20ms
22 | cur_value = pin.value()
23 | active = 0
24 | while active < 20:
25 | if pin.value() != cur_value:
26 | active += 1
27 | else:
28 | active = 0
29 | pyb.delay(1)
30 |
31 |
32 | Use it something like this
33 |
34 | .. code-block:: python
35 |
36 | import pyb
37 |
38 | pin_x1 = pyb.Pin('X1', pyb.Pin.IN, pyb.Pin.PULL_DOWN)
39 | while True:
40 | wait_pin_change(pin_x1)
41 | pyb.LED(4).toggle()
42 |
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTII/1_servo.rst:
--------------------------------------------------------------------------------
1 | Controlling hobby servo motors
2 | ==============================
3 |
4 | There are 4 dedicated connection points on the pyboard for connecting up
5 | hobby servo motors (see eg
6 | `Wikipedia `_ ).
7 | These motors have 3 wires: ground, power and signal. On the pyboard you
8 | can connect them in the bottom right corner, with the signal pin on the
9 | far right. Pins ``X1``, ``X2``, ``X3`` and ``X4`` are the 4 dedicated servo signal pins.
10 |
11 | .. image:: /docs/pyboard/tutorial/img/pyboard_servo.jpg
12 |
13 | In this picture there are male-male double adaptors to connect the servos
14 | to the header pins on the pyboard.
15 |
16 | The ground wire on a servo is usually the darkest coloured one, either
17 | black or dark brown. The power wire will most likely be red.
18 |
19 | The power pin for the servos (labelled VIN) is connected directly to the
20 | input power source of the pyboard. When powered via USB, VIN is powered
21 | through a diode by the 5V USB power line. Connect to USB, the pyboard can
22 | power at least 4 small to medium sized servo motors.
23 |
24 | If using a battery to power the pyboard and run servo motors, make sure it
25 | is not greater than 6V, since this is the maximum voltage most servo motors
26 | can take. (Some motors take only up to 4.8V, so check what type you are
27 | using.)
28 |
29 | Creating a Servo object
30 | -----------------------
31 |
32 | Plug in a servo to position 1 (the one with pin X1) and create a servo object
33 | using
34 |
35 | .. code-block:: python
36 |
37 | servo1 = pyb.Servo(1)
38 |
39 | To change the angle of the servo use the ``angle`` method
40 |
41 | .. code-block:: python
42 |
43 | servo1.angle(45)
44 | servo1.angle(-60)
45 |
46 | The angle here is measured in degrees, and ranges from about -90 to +90,
47 | depending on the motor. Calling ``angle`` without parameters will return
48 | the current angle
49 |
50 | .. code-block:: python
51 |
52 | servo1.angle()
53 | -60
54 |
55 | Note that for some angles, the returned angle is not exactly the same as
56 | the angle you set, due to rounding errors in setting the pulse width.
57 |
58 | You can pass a second parameter to the ``angle`` method, which specifies how
59 | long to take (in milliseconds) to reach the desired angle. For example, to
60 | take 1 second (1000 milliseconds) to go from the current position to 50 degrees,
61 | use
62 |
63 | .. code-block:: python
64 |
65 | servo1.angle(50, 1000)
66 |
67 | This command will return straight away and the servo will continue to move
68 | to the desired angle, and stop when it gets there. You can use this feature
69 | as a speed control, or to synchronise 2 or more servo motors. If we have
70 | another servo motor (``servo2 = pyb.Servo(2)``) then we can do
71 |
72 | .. code-block:: python
73 |
74 | servo1.angle(-45, 2000); servo2.angle(60, 2000)
75 |
76 | This will move the servos together, making them both take 2 seconds to
77 | reach their final angles.
78 |
79 | Note: the semicolon between the 2 expressions above is used so that they
80 | are executed one after the other when you press enter at the REPL prompt.
81 | In a script you don't need to do this, you can just write them one line
82 | after the other.
83 |
84 | Continuous rotation servos
85 | --------------------------
86 |
87 | So far we have been using standard servos that move to a specific angle
88 | and stay at that angle. These servo motors are useful to create joints
89 | of a robot, or things like pan-tilt mechanisms. Internally, the motor
90 | has a variable resistor (potentiometer) which measures the current angle
91 | and applies power to the motor proportional to how far it is from the
92 | desired angle. The desired angle is set by the width of a high-pulse on
93 | the servo signal wire. A pulse width of 1500 microsecond corresponds
94 | to the centre position (0 degrees). The pulses are sent at 50 Hz, ie
95 | 50 pulses per second.
96 |
97 | You can also get **continuous rotation** servo motors which turn
98 | continuously clockwise or counterclockwise. The direction and speed of
99 | rotation is set by the pulse width on the signal wire. A pulse width
100 | of 1500 microseconds corresponds to a stopped motor. A pulse width
101 | smaller or larger than this means rotate one way or the other, at a
102 | given speed.
103 |
104 | On the pyboard, the servo object for a continuous rotation motor is
105 | the same as before. In fact, using ``angle`` you can set the speed. But
106 | to make it easier to understand what is intended, there is another method
107 | called ``speed`` which sets the speed
108 |
109 | .. code-block:: python
110 |
111 | servo1.speed(30)
112 |
113 | ``speed`` has the same functionality as ``angle``: you can get the speed,
114 | set it, and set it with a time to reach the final speed.
115 |
116 | .. code-block:: python
117 |
118 | servo1.speed()
119 | 30
120 | servo1.speed(-20)
121 | servo1.speed(0, 2000)
122 |
123 | The final command above will set the motor to stop, but take 2 seconds
124 | to do it. This is essentially a control over the acceleration of the
125 | continuous servo.
126 |
127 | A servo speed of 100 (or -100) is considered maximum speed, but actually
128 | you can go a bit faster than that, depending on the particular motor.
129 |
130 | The only difference between the ``angle`` and ``speed`` methods (apart from
131 | the name) is the way the input numbers (angle or speed) are converted to
132 | a pulse width.
133 |
134 | Calibration
135 | -----------
136 |
137 | The conversion from angle or speed to pulse width is done by the servo
138 | object using its calibration values. To get the current calibration,
139 | use
140 |
141 | .. code-block:: python
142 |
143 | servo1.calibration()
144 | (640, 2420, 1500, 2470, 2200)
145 |
146 | There are 5 numbers here, which have meaning:
147 |
148 | 1. Minimum pulse width; the smallest pulse width that the servo accepts.
149 | 2. Maximum pulse width; the largest pulse width that the servo accepts.
150 | 3. Centre pulse width; the pulse width that puts the servo at 0 degrees
151 | or 0 speed.
152 | 4. The pulse width corresponding to 90 degrees. This sets the conversion
153 | in the method ``angle`` of angle to pulse width.
154 | 5. The pulse width corresponding to a speed of 100. This sets the conversion
155 | in the method ``speed`` of speed to pulse width.
156 |
157 | You can recalibrate the servo (change its default values) by using
158 |
159 | .. code-block:: python
160 |
161 | servo1.calibration(700, 2400, 1510, 2500, 2000)
162 |
163 | Of course, you would change the above values to suit your particular
164 | servo motor.
165 |
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTII/2_fading_led.rst:
--------------------------------------------------------------------------------
1 | Fading LEDs
2 | ===========
3 |
4 | In addition to turning LEDs on and off, it is also possible to control the brightness of an LED using `Pulse-Width Modulation (PWM) `_, a common technique for obtaining variable output from a digital pin. This allows us to fade an LED:
5 |
6 | .. image:: http://upload.wikimedia.org/wikipedia/commons/a/a9/Fade.gif
7 |
8 | Components
9 | ----------
10 | Inside your blue ESD box you'll find a 100 Ohm resistor and an LED. If you compare the setup to the schematics in you'll find that this is made up simpler to get used to using first external components with your pyboard. But if you want to try this example with a breadboard again, you will need:
11 |
12 | - Standard 5 or 3 mm LED
13 | - 100 Ohm resistor
14 | - Wires
15 | - `Breadboard `_ (optional, but makes things easier)
16 |
17 | Connecting Things Up
18 | --------------------
19 |
20 | For this tutorial, we will use the ``X1`` pin. Connect one end of the resistor to ``X1``, and the other end to the **anode** of the LED, which is the longer leg. Connect the **cathode** of the LED to ground. You can look at the LED and see the different leg sizes of the LED.
21 |
22 | .. image:: /docs/pyboard/tutorial/img/fading_leds_breadboard_fritzing.png
23 |
24 | Code
25 | ----
26 |
27 | For switching on the LED on ``X1``
28 |
29 | .. code-block:: python
30 |
31 | pin_x1 = pyb.Pin('X1', pyb.Pin.IN, pyb.Pin.PULL_UP)
32 |
33 | By examining the `Pinlayout for the pyboard lite `_ , we see that ``X1`` is connected to channel 3 of timer 5 (``TIM5 CH3``). Therefore we will first create a ``Timer`` object for timer 5, then create a ``TimerChannel`` object for channel 3
34 |
35 | .. code-block:: python
36 |
37 | from pyb import Timer
38 | from time import sleep
39 |
40 | # timer 5 will be created with a frequency of 100 Hz
41 | tim = pyb.Timer(5, freq=100)
42 | tchannel = tim.channel(3, Timer.PWM, pin=pyb.Pin.board.X1, pulse_width=0)
43 |
44 | Brightness of the LED in PWM is controlled by controlling the pulse-width, that is the amount of time the LED is on every cycle. With a timer frequency of 100 Hz, each cycle takes 0.01 second, or 10 ms.
45 |
46 |
47 |
48 |
49 | To achieve the fading effect shown at the beginning of this tutorial, we want to set the pulse-width to a small value, then slowly increase the pulse-width to brighten the LED, and start over when we reach some maximum brightness
50 |
51 | .. code-block:: python
52 |
53 | # maximum and minimum pulse-width, which corresponds to maximum
54 | # and minimum brightness
55 | max_width = 200000
56 | min_width = 20000
57 |
58 | # how much to change the pulse-width by each step
59 | wstep = 1500
60 | cur_width = min_width
61 |
62 | while True:
63 | tchannel.pulse_width(cur_width)
64 |
65 | # this determines how often we change the pulse-width. It is
66 | # analogous to frames-per-second
67 | sleep(0.01)
68 |
69 | cur_width += wstep
70 |
71 | if cur_width > max_width:
72 | cur_width = min_width
73 |
74 | Breathing Effect
75 | ----------------
76 |
77 | If we want to have a breathing effect, where the LED fades from dim to bright then bright to dim, then we simply need to reverse the sign of ``wstep`` when we reach maximum brightness, and reverse it again at minimum brightness. To do this we modify the ``while`` loop to be
78 |
79 | .. code-block:: python
80 |
81 | while True:
82 | tchannel.pulse_width(cur_width)
83 |
84 | sleep(0.01)
85 |
86 | cur_width += wstep
87 |
88 | if cur_width > max_width:
89 | cur_width = max_width
90 | wstep *= -1
91 | elif cur_width < min_width:
92 | cur_width = min_width
93 | wstep *= -1
94 |
95 | First Exercise
96 | ----------------
97 | How would you change the code, if you want to use Pin ``X2`` for this exercise? Which channel would you need to change?
98 |
99 | Advanced Exercise
100 | -----------------
101 |
102 | You may have noticed that the LED brightness seems to fade slowly, but increases quickly. This is because our eyes interprets brightness logarithmically (`Weber's Law `_
103 | ), while the LED's brightness changes linearly, that is by the same amount each time. How do you solve this problem? (Hint: what is the opposite of the logarithmic function?)
104 |
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTII/3_lcd160cr_skin.rst:
--------------------------------------------------------------------------------
1 | The LCD160CR skin
2 | =================
3 |
4 | This tutorial shows how to get started using the LCD160CR skin.
5 |
6 | .. image:: http://micropython.org/resources/LCD160CRv10-positions.jpg
7 | :alt: LCD160CRv1.0 picture
8 | :width: 800px
9 |
10 | For detailed documentation of the driver for the display see the
11 | `lcd160cr `_ module.
12 |
13 | Plugging in the display on top of a pyboard
14 | -----------------------
15 |
16 | The display can be plugged directly into a pyboard (all pyboard versions
17 | are supported). You plug the display onto the top of the pyboard either
18 | in the X or Y positions. The display should cover half of the pyboard.
19 | See the picture above for how to achieve this; the left half of the picture
20 | shows the X position, and the right half shows the Y position.
21 |
22 | Getting the driver
23 | ------------------
24 |
25 | You can control the display directly using a power/enable pin and an I2C
26 | bus, but it is much more convenient to use the driver provided by the
27 | `lcd160cr `_ module. This driver is included in recent version of the
28 | pyboard firmware (see `here `__). You
29 | can also find the driver in the GitHub repository
30 | `here `__, and to use this version you will need to copy the file to your
31 | board, into a directory that is searched by import (usually the lib/
32 | directory).
33 |
34 | Once you have the driver installed you need to import it to use it
35 |
36 | .. code-block:: python
37 |
38 | import lcd160cr
39 |
40 | Testing the display
41 | -------------------
42 |
43 | There is a test program which you can use to test the features of the display,
44 | and which also serves as a basis to start creating your own code that uses the
45 | LCD. This test program is included in recent versions of the pyboard firmware
46 | and is also available on GitHub
47 | `here `__.
48 |
49 | To run the test from the MicroPython prompt do
50 |
51 | .. code-block:: python
52 |
53 | import lcd160cr_test
54 |
55 | It will then print some brief instructions. You will need to know which
56 | position your display is connected to (X or Y) and then you can run (assuming
57 | you have the display on position X)
58 |
59 | .. code-block:: python
60 |
61 | lcd160cr_test.test_all('X')
62 |
63 | Drawing some graphics
64 | ---------------------
65 |
66 | You must first create an LCD160CR object which will control the display. Do this
67 | using
68 |
69 | .. code-block:: python
70 |
71 | import lcd160cr
72 | lcd = lcd160cr.LCD160CR('X')
73 |
74 | This assumes your display is connected in the X position. If it's in the Y
75 | position then use ``lcd = lcd160cr.LCD160CR('Y')`` instead.
76 |
77 | To erase the screen and draw a line, try
78 |
79 | .. code-block:: python
80 |
81 | lcd.set_pen(lcd.rgb(255, 0, 0), lcd.rgb(64, 64, 128))
82 | lcd.erase()
83 | lcd.line(10, 10, 50, 80)
84 |
85 | Task: How would you change the colour of the line? How you place the line at another place?
86 |
87 | The next example draws random rectangles on the screen. You can copy-and-paste it
88 | into the MicroPython prompt by first pressing "Ctrl-E" at the prompt, then "Ctrl-D"
89 | once you have pasted the text.
90 |
91 | .. code-block:: python
92 |
93 | from random import randint
94 | for i in range(1000):
95 | fg = lcd.rgb(randint(128, 255), randint(128, 255), randint(128, 255))
96 | bg = lcd.rgb(randint(0, 128), randint(0, 128), randint(0, 128))
97 | lcd.set_pen(fg, bg)
98 | lcd.rect(randint(0, lcd.w), randint(0, lcd.h), randint(10, 40), randint(10, 40))
99 |
100 | **Task:** How would you draw two rectangles on the screen? Try to give them different colours.
101 |
102 | Using the touch sensor
103 | ----------------------
104 |
105 | The display includes a resistive touch sensor that can report the position (in
106 | pixels) of a single force-based touch on the screen. To see if there is a touch
107 | on the screen use
108 |
109 | .. code-block:: python
110 |
111 | lcd.is_touched()
112 |
113 | This will return either ``False`` or ``True``. Run the above command while touching
114 | the screen to see the result.
115 |
116 | To get the location of the touch you can use the method
117 |
118 | .. code-block:: python
119 |
120 | lcd.get_touch()
121 |
122 | This will return a 3-tuple, with the first entry being 0 or 1 depending on whether
123 | there is currently anything touching the screen (1 if there is), and the second and
124 | third entries in the tuple being the x and y coordinates of the current (or most
125 | recent) touch.
126 |
127 | Playing around with setup commands
128 | -----------------------
129 |
130 | Let's see how easy it is to write something on the screen
131 |
132 | .. code-block:: python
133 |
134 | import lcd160cr
135 |
136 | lcd = lcd160cr.LCD160CR('X')
137 | lcd.set_orient(lcd160cr.PORTRAIT)
138 | lcd.set_pos(0, 0)
139 | lcd.set_text_color(lcd.rgb(255, 0, 0), lcd.rgb(0, 0, 0))
140 | lcd.set_font(1)
141 | lcd.write('Hello pyladies Berin!')
142 | print('touch:', lcd.get_touch())
143 |
144 | **Task**: How would you change the orientation of the Display? How can you change the font size and font colour?
145 |
146 | Directing the MicroPython output to the display
147 | -----------------------------------------------
148 |
149 | The display supports input from a UART and implements basic VT100 commands, which
150 | means it can be used as a simple, general purpose terminal. Let's set up the
151 | pyboard to redirect its output to the display.
152 |
153 | First you need to create a UART object
154 |
155 | .. code-block:: python
156 |
157 | import pyb
158 | uart = pyb.UART('XA', 115200)
159 |
160 | This assumes your display is connected to position ``X``. If it's on position Y then
161 | use ``uart = pyb.UART('YA', 115200)`` instead.
162 |
163 | Now, connect the REPL output to this UART
164 |
165 | .. code-block:: python
166 |
167 | pyb.repl_uart(uart)
168 |
169 | From now on anything you type at the MicroPython prompt, and any output you
170 | receive, will appear on the display.
171 |
172 | No set-up commands are required for this mode to work and you can use the display
173 | to monitor the output of any UART, not just from the pyboard. All that is needed
174 | is for the display to have power, ground and the power/enable pin driven high.
175 | Then any characters on the display's UART input will be printed to the screen.
176 | You can adjust the UART baudrate from the default of 115200 using the
177 | `set_uart_baudrate` method.
178 |
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTIII/ESP8266Link.rst:
--------------------------------------------------------------------------------
1 | Advanced Tutorial
2 | ----------------
3 | You did explore the pyboard with MicroPython and you want to try different hardware? Please get one of the Adafruit Feather Huzzah Boards and explore the Tutorial: http://docs.micropython.org/en/latest/esp8266/
4 |
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTIII/HDC1080_test.py:
--------------------------------------------------------------------------------
1 | """Tests for the hdc1080 module"""
2 |
3 | #check, if the sensor is connected to a ESP8266 or a pyboard
4 | import machine
5 | try:
6 | import esp
7 | esp.osdebug(None)
8 | i2c = machine.I2C(sda=machine.Pin(4), scl=machine.Pin(5))
9 | except:
10 | pass
11 | try:
12 | import pyb
13 | i2c = machine.I2C(sda=machine.Pin('X10'), scl=machine.Pin('X9'), freq=400000)
14 | except:
15 | pass
16 | import utime
17 |
18 | i2c.scan()
19 |
20 | dt = 20
21 | b1 = bytearray(1)
22 | b2 = bytearray(2)
23 |
24 | def hdc1080_read(a=0):
25 | b1[0] = a
26 | i2c.writeto(64, b1)
27 | pyb.delay(dt)
28 | i2c.readfrom_into(64, b2)
29 | #return '%02x%02x' % (b[0], b[1])
30 | return (b2[0] << 8) | b2[1]
31 |
32 | #calculating temperature
33 | def hdc_temp():
34 | t = hdc1080_read(0)
35 | return (t / 0x10000)*165-40
36 |
37 | #calculating humidity
38 | def hdc_hum():
39 | t = hdc1080_read(1)
40 | return (t / 0x10000)*100
41 |
42 | def read_sensors():
43 | print("Temperature (degree celsius): %.2f" % (hdc_temp()))
44 | print("Relative humidity (percent): %.2f" % (hdc_hum()))
45 | #print("Both sensors read at once: %.2f %.2f" % hdc.temp_hum())
46 | #print("Battery low: %s" % (hdc.battery_low()))
47 |
48 | def main():
49 | print("Reading sensors 10 times using idle sleeping...")
50 | for i in range(10):
51 | read_sensors()
52 | utime.sleep_ms(100)
53 |
54 | #main()
55 |
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTIII/HYGROMETER.rst:
--------------------------------------------------------------------------------
1 | Building your own Temperature and Humidity Control Device
2 | ---------------------
3 |
4 | After exploring the temperature and humidity sensor and runing your first test script in the REPL, we want to combine our
5 | different hardware components. Now we want to build our own Temperature and Humidity meassurement device. Of course, you can buy such devices for a few Euros, but where is the fun in that?
6 |
7 | Hardware needed for this task:
8 | ----------------
9 |
10 | * pyboard lite with accelerometer
11 | * Jumper Wires and male Pins
12 | * Temperature Sensor HDC1080 on break out board
13 | * LCD160CRv1.0 Display with header
14 | * Micro USB cable for connecting to the PC
15 |
16 | Wire up your Sensor to one of the I2C Ports (do you remember on which Pins they are? If not, you can always have a look at the
17 | Data sheet of the pyboard). Make sure the SDA
18 | Take a look into the HDC1080 test program. The easiest way to show the meassured temperature and humidity on your
19 | Display is directing the REPL to the Display. If you don't remember how that works. Please go back to Link:
20 |
21 | **TASK 1: Using the other I2C connecton on the pyboard**
22 |
23 | Have a look at the datasheet of the pyboard lite with accelerometer. Can you adjust the test code in the hdc1080_test.py and use the Temperature sensor with the other I2C? On which Pins is it?
24 |
25 | **TASK 2: Temperature and Humidity on screen with the REPL**
26 |
27 | Show the Temperature and Humidity on your Display with directing the REPL directly to it.
28 | This looks not very nice. Now we want to show both Temperature and Humidity values on a nice setup.
29 |
30 | **TASK 3: Temperature and Humidity on the screen**
31 |
32 | Show the Temperature and Humidity values on the Display. Try to show them in different colours. Add the right Temperature in °C and Humidity in %. Feel free to do this in any way you like.
33 |
34 | .. image:: /docs/pyboard/tutorial/img/image.png
35 |
36 | **TASK 4: Data-logger for the Temperature**
37 |
38 | Think about how you would like to log your data in an infinite loop. There are two ways of doing this. There is the internal flash of the pyboard and if you put a SD-Card in your pyboard, the data will be logged to that file.
39 |
40 | .. code-block:: python
41 |
42 | rtc = pyb.RTC()
43 |
44 | def writeLog(rtc, temp, hum):
45 | """Append a line with the current timestamp to the log file"""
46 | datetime=rtc.datetime()
47 | timestamp = ("%04d-%02d-%02d %02d:%02d:%02d" % (datetime[0],
48 | datetime[1], datetime[2], datetime[4], datetime[5], datetime[6]))
49 | logline = ("%s %s %s" % (timestamp, temp, hum))
50 |
51 | print(logline)
52 | try:
53 | with open("/sd/logdata.txt", "a") as f:
54 | f.write("%s\n" % logline)
55 | f.close()
56 | pyb.sync()
57 | except:
58 | pass
59 | try:
60 | with open("/flash/logdata.txt", "a") as f:
61 | f.write("%s\n" % logline)
62 | f.close()
63 | pyb.sync()
64 |
65 | except OSError as error:
66 | print("Error: can not write to SD card. %s" % error)
67 |
68 | def log():
69 | for i in range(20):
70 | writeLog(rtc,hdc_temp(),hdc_hum())
71 |
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTIII/apds9960/Broadcom-APDS-9960-datasheet.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/21_Micro_Python_IoT_Workshop/PARTIII/apds9960/Broadcom-APDS-9960-datasheet.pdf
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTIII/apds9960/test_rgbc.py:
--------------------------------------------------------------------------------
1 | import pyb
2 | from time import sleep
3 |
4 | from machine import Pin, I2C
5 |
6 | from apds9960.const import *
7 | from apds9960 import uAPDS9960 as APDS9960
8 |
9 | import micropython
10 |
11 | bus = I2C(1, freq=400000)
12 |
13 | apds = APDS9960(bus)
14 |
15 | x11 = pyb.Pin('X11')
16 |
17 | ba= bytearray(512)
18 | b1 = memoryview(ba)[:1]
19 | b2 = memoryview(ba)[:2]
20 |
21 | def hexb(a, off=0):
22 | if type(a) in [type(bytearray()),type(bytes()),type(memoryview(''))]:
23 | sbuf = ''
24 | for i in range(0,len(a),1):
25 | if i & 0xf == 0:
26 | if len(sbuf): print(sbuf)
27 | sbuf='%04x ' % (i+off)
28 | if i & 0x3 == 0:
29 | sbuf += ' '
30 | sbuf+=' %02x' % (a[i+0])
31 | print(sbuf)
32 |
33 | def dump(a=0, n=256):
34 | if (a+n) > 256:
35 | n = 256-a
36 | for i in range(a, a+n):
37 | ba[i] = apds._read_byte_data(i)
38 | hexb(ba[a:a+n], a)
39 |
40 | def iforce(p=None):
41 | bus.writeto(I2C_ADDR, b'\«e4')
42 |
43 | def iclear(p=None):
44 | apds.clearProximityInt()
45 |
46 | def igclear(p=None):
47 | print('cbg', p, x11())
48 | apds._write_byte_data(0xab, 0x06) # clear gesture INT
49 |
50 | icnt = 0
51 |
52 | def cb(p):
53 | global icnt
54 | icnt += 1
55 | print('cb', p, x11())
56 | micropython.schedule(iclear, 1)
57 |
58 | def cbg(p):
59 | global icnt
60 | icnt += 1
61 | micropython.schedule(igclear, 1)
62 |
63 | def mrg():
64 | if not (apds.getMode() & 0b01000001) or not apds.isGestureAvailable():
65 | return -1
66 | if (apds.isGestureAvailable()):
67 | # read the current FIFO level
68 | fifo_status = apds._read_byte_data(REG_GSTATUS)
69 | if fifo_status & 2:
70 | print('OVL')
71 | else:
72 | print('GEST')
73 | fifo_level = apds._read_byte_data(REG_GFLVL)
74 | # if there's stuff in the FIFO, read it into our data block
75 | if fifo_level > 0:
76 | #fifo_data = []
77 | for i in range(0, fifo_level):
78 | apds.bus.readfrom_mem_into(apds.address, REG_GFIFO_U, memoryview(ba)[i*4:i*4+4])
79 | #fifo_data += apds._read_i2c_block_data(REG_GFIFO_U, 4)
80 | #print(end='.')
81 | return memoryview(ba)[:fifo_level*4]
82 | else:
83 | return '-'
84 |
85 |
86 | def gest():
87 | print("Gesture Test")
88 | print("============")
89 | apds._write_byte_data(0xa0, 0x40) # start gesture level
90 | apds._write_byte_data(0xa1, 0x20) # end gesture level
91 | apds._write_byte_data(0xa2, 0x00) # default
92 | apds._write_byte_data(0xa3, 0x07) # GAIN:1x, 100 mA, 39.2 ms/sample
93 |
94 | #apds._write_byte_data(0xab, 0x02) # gesture INT enable
95 |
96 | apds.setAmbientLightIntEnable(0)
97 | apds.setProximityIntEnable(0)
98 | exti = pyb.ExtInt(x11, mode=pyb.ExtInt.IRQ_FALLING, pull=pyb.Pin.PULL_NONE, callback=None)
99 | #exti = pyb.ExtInt(x11, mode=pyb.ExtInt.IRQ_FALLING, pull=pyb.Pin.PULL_NONE, callback=cbg)
100 | apds.enableGestureSensor()
101 | apds._write_byte_data(0xab, 0x00) # gesture INT disable
102 | while True:
103 | sleep(0.5)
104 | res = mrg()
105 | hexb(res)
106 | #print(mrg())
107 | #if apds.isGestureAvailable():
108 | # motion = apds.readGesture()
109 | # print("%4d" % (motion))
110 |
111 | def main():
112 | print("RGBC Test")
113 | print("=========")
114 | exti = pyb.ExtInt(x11, mode=pyb.ExtInt.IRQ_FALLING, pull=pyb.Pin.PULL_NONE, callback=None)
115 | exti = pyb.ExtInt(x11, mode=pyb.ExtInt.IRQ_FALLING, pull=pyb.Pin.PULL_NONE, callback=cb)
116 | iclear()
117 | apds.enableLightSensor()
118 | apds.setAmbientLightIntEnable(0)
119 |
120 | apds.setProxIntHighThresh(200)
121 | apds.setProxIntLowThresh(0x0)
122 | apds.enableProximitySensor()
123 | while True:
124 | sleep(0.25)
125 | r = apds.readRedLight()
126 | g = apds.readGreenLight()
127 | b = apds.readBlueLight()
128 | c = apds.readAmbientLight()
129 | p = apds.readProximity()
130 | print('%5d %5d %5d %5d %8d %d' % (r, g, b, c, p, x11()))
131 | # iclear()
132 |
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTIII/datasheets/MMA7660FC.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/21_Micro_Python_IoT_Workshop/PARTIII/datasheets/MMA7660FC.pdf
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/PARTIII/datasheets/hdc1080.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/21_Micro_Python_IoT_Workshop/PARTIII/datasheets/hdc1080.pdf
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/img/fading_leds_breadboard_fritzing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/21_Micro_Python_IoT_Workshop/img/fading_leds_breadboard_fritzing.png
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/img/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/21_Micro_Python_IoT_Workshop/img/image.png
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/img/pyboard_servo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/21_Micro_Python_IoT_Workshop/img/pyboard_servo.jpg
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/img/pyboard_usb_micro.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/21_Micro_Python_IoT_Workshop/img/pyboard_usb_micro.jpg
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/img/skin_amp_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/21_Micro_Python_IoT_Workshop/img/skin_amp_1.jpg
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/img/skin_amp_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/21_Micro_Python_IoT_Workshop/img/skin_amp_2.jpg
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/img/skin_lcd_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/21_Micro_Python_IoT_Workshop/img/skin_lcd_1.jpg
--------------------------------------------------------------------------------
/workshops/21_Micro_Python_IoT_Workshop/img/skin_lcd_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/21_Micro_Python_IoT_Workshop/img/skin_lcd_2.jpg
--------------------------------------------------------------------------------
/workshops/22_Hardware_hack_evening/README.md:
--------------------------------------------------------------------------------
1 |
2 | 
3 |
4 | # 📚 Resources 🤖
5 |
6 | Here is a selection of useful resources for getting started in Hardware hacking.
7 |
8 | No Hardware? No Problem!
9 | You can test out scripts on this browser version of the [MicroPython Pyboard](http://www.micropython.org/unicorn/)!
10 |
11 | ## :computer: Websites for learning about IoT
12 | - [Hackster](https://www.hackster.io/) *(website for learning about hardware)*
13 | - [Coursera course for IoT](https://www.coursera.org/specializations/iot) *(MOOC)*
14 | - [Adafruit](https://www.adafruit.com/) *(Awesome site for all things hardware!)*
15 | - [Women in Hardware](https://www.youtube.com/watch?v=Idv8r_f8x_k) *(Video series with women working in hardware)*
16 | - [IoT podcast](https://iotpodcast.com/) *(Podcast about IoT)*
17 |
18 | ## :computer: Resources split by language/ hardware
19 | ## 🐍 MicroPython
20 | - [Official forum for MicroPython](https://forum.micropython.org/viewtopic.php?t=76)
21 | - [Workshop from MicroPython X PyLadies event](https://github.com/tine3700/micropython/tree/master/docs/pyboard/tutorial)
22 |
23 | ## ♾️ Arduino
24 | - [Coursera course for Arduino](https://www.coursera.org/learn/arduino) *(MOOC)*
25 | - [Official forum for Arduino](http://forum.arduino.cc/)
26 |
27 | ## 🍓 Raspberry Pi
28 | - [Raspbery Pi Workshop on Udemy](https://www.udemy.com/raspberry-pi-workshop-become-a-coder-maker-inventor/) *(MOOC)*
29 | - [Piborg](https://www.piborg.org/) *(online shop for building Raspberry Pi robots)*
30 |
31 | - [Official Website for Raspberry Pi](https://www.raspberrypi.org/resources/learn/)
32 | - [Mod My Pi](https://www.modmypi.com/)
33 | - [Haynes manual for Raspberry pi](https://www.amazon.com/dp/0857332953) *(Book)*
34 | - [Magpi](https://www.raspberrypi.org/magpi/) *(online magasine that you can download for free, full of projects & inspiration)*
35 | - [Pi Podcast](https://thepipodcast.com/)
36 | - [Reddit channel for Raspberry pi](https://www.reddit.com/r/raspberry_pi/)
37 |
38 | ## 🐹 Go
39 | - [Write in Go for the Raspberry Pi](https://gobot.io/documentation/getting-started/)
40 |
41 | ## 👁️ JavaScript
42 | - [Write in Javascript for the Raspberry Pi](https://cylonjs.com/)
43 |
44 | ## 💎 Ruby
45 | - [Write in Ruby for the Raspberry Pi](http://artoo.io/)
46 |
47 | ## 🐘PHP
48 | - [PHP on Raspberry Pi resources](https://github.com/PiPHP/Resources)
49 |
50 |
51 | ## 👩💻Other Berlin based Meetups
52 | - [Heart of Code](http://heartofcode.org/) *(beginner friendly hardware co-learning)*
53 | - [Coders Club](https://www.facebook.com/groups/1968788209862149/?multi_permalinks=2151482021592766¬if_id=1535578255867282¬if_t=group_activity) *(weekly co-learning current focus on hardware)*
54 | - [Raspberry jam Berlin](http://raspberryjamberlin.de/)
55 | - [Berlin IoT Makers](https://www.meetup.com/Berlin-IoT-Makers-Workshop/)
56 | - [Hardware.co](https://www.meetup.com/hardwaredotco/)
57 | - [Python Users Group Berlin](https://www.meetup.com/Python-Users-Berlin-PUB/)
58 |
59 |
60 | ### :smiley: :trophy: Addding resources yourself
61 | - You can clone this repository and add resources if you do so :heart_eyes:, please submit a Pull
62 | Request.
63 | - How to create a pull request? This guide will help you get started: [Opening a pull request](https://opensource.guide/how-to-contribute/#opening-a-pull-request) :heart:
64 |
65 |
66 | ## :satellite: Contact us
67 | You can reach us either through [email](berlinpyladies@gmail.com) or on our [slack](https://pyladies-berlin.slack.com), if your not already a member you can an invite [here](https://pyladies-berlin.herokuapp.com/).
68 |
69 |
70 |
71 |
72 | ## :v: Code of conduct
73 |
74 | The PyLadies community has a code of conduct that are shared between all our members and apply at our Meetups as well as on our online platforms, please respect [our shared values](http://www.pyladies.com/CodeOfConduct/). :relieved:
75 |
76 |
--------------------------------------------------------------------------------
/workshops/22_Hardware_hack_evening/community-announcements (2).pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/22_Hardware_hack_evening/community-announcements (2).pdf
--------------------------------------------------------------------------------
/workshops/22_Hardware_hack_evening/hardware-hackevening.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/22_Hardware_hack_evening/hardware-hackevening.png
--------------------------------------------------------------------------------
/workshops/23_Data_Wrangling_Pandas/Pandas.odp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/23_Data_Wrangling_Pandas/Pandas.odp
--------------------------------------------------------------------------------
/workshops/23_Data_Wrangling_Pandas/README.md:
--------------------------------------------------------------------------------
1 | # Workshop Data wrangling with Pandas
2 |
3 | It is a very interactive workshop that has a lot action and fun! I can be reused with new cards for many different topics.
4 |
5 | 1. Attendees were given [these cards](https://github.com/PyLadiesBerlin/resources/raw/master/workshops/23_Data_Wrangling_Pandas/Pandas.odp) to choose some of them
6 | 2. Then they would have to look up these pandas methods for 10 -15 minutes
7 | 3. Then they would have to find somebody to explain their cards and exchange them.
8 |
9 | You can also find here the [template of the cards](https://github.com/PyLadiesBerlin/resources/raw/master/workshops/23_Data_Wrangling_Pandas/Template.odp) to create your own.
10 |
--------------------------------------------------------------------------------
/workshops/23_Data_Wrangling_Pandas/Template.odp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/23_Data_Wrangling_Pandas/Template.odp
--------------------------------------------------------------------------------
/workshops/24_scikit-learn_fairlearn_sprint/2025_Feb_scikit-learn_fairlearn_sprint.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/24_scikit-learn_fairlearn_sprint/2025_Feb_scikit-learn_fairlearn_sprint.pdf
--------------------------------------------------------------------------------
/workshops/2_understanding_the_web_basics/README.md:
--------------------------------------------------------------------------------
1 | # Understanding the web basics
2 | ## Speaker: Mei Li Triantafyllidi
3 |
4 | Link to materials: http://prezi.com/d0y4zd3n8qvv/understanding-the-web-basics/
5 |
--------------------------------------------------------------------------------
/workshops/2_understanding_the_web_basics/slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/2_understanding_the_web_basics/slides.pdf
--------------------------------------------------------------------------------
/workshops/3_introduction_to_django/README.md:
--------------------------------------------------------------------------------
1 | # Understanding the web basics
2 | ## Speaker: Mei Li Triantafyllidi
3 |
4 | Link to materials: https://docs.djangoproject.com/en/dev/intro/tutorial01/
5 |
--------------------------------------------------------------------------------
/workshops/4_introduction_to_git/README.md:
--------------------------------------------------------------------------------
1 | # Introduction to git
2 | ## Speaker: Patricia Garcia
3 |
4 | Link to materials: http://prezi.com/eelvsdxruksn/version-control-with-git-pyladies/
5 |
--------------------------------------------------------------------------------
/workshops/4_introduction_to_git/slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/4_introduction_to_git/slides.pdf
--------------------------------------------------------------------------------
/workshops/5_python_basics_variables_functions_files_for_beginners/README.md:
--------------------------------------------------------------------------------
1 | # Python basics: variables, functions, files for beginners
2 | ## Speaker: Klara Holzmann
3 |
4 | Link to materials: http://learnpythonthehardway.org/book/
5 |
--------------------------------------------------------------------------------
/workshops/6_data_visualization_with_django_and_highcharts/README.md:
--------------------------------------------------------------------------------
1 | # Data Visualization with Django and HighCharts
2 | ## Speaker: Tamara Atanasoska
3 |
4 | Link to materials: http://prezi.com/eelvsdxruksn/version-control-with-git-pyladies/
5 |
6 | Link to exercises: https://github.com/TamaraAtanasoska/womenInTech
7 |
--------------------------------------------------------------------------------
/workshops/7_workshop_web_scraping/README.md:
--------------------------------------------------------------------------------
1 | # The Workshop Day: Web Scraping
2 | ## Speaker: -
3 |
4 | Link to materials: http://newcoder.io/scrape/
5 |
--------------------------------------------------------------------------------
/workshops/8_python_in_science/README.md:
--------------------------------------------------------------------------------
1 | # Python in Science
2 | ## Speaker: Ivana Kajić
3 |
4 | Link to materials: http://ikajic.github.io/pyscience/
5 |
6 | Link to exercises: https://github.com/ikajic/pyscience/ and http://scikit-learn.org/stable/tutorial/basic/tutorial.html#introduction
7 |
--------------------------------------------------------------------------------
/workshops/8_python_in_science/slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/8_python_in_science/slides.pdf
--------------------------------------------------------------------------------
/workshops/9_test_driven_development/README.md:
--------------------------------------------------------------------------------
1 | # Test Driven Development
2 | ## Speaker: Max Brauer
3 |
4 | Link to slides and exercises: https://github.com/mamachanko/tdd-talk/tree/master
5 |
6 | For those who want more on TDD: http://jeffknupp.com/blog/2013/12/09/improve-your-python-understanding-unit-testing/
7 |
--------------------------------------------------------------------------------
/workshops/9_test_driven_development/slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PyLadiesBerlin/resources/d291f43fb8432f555cac2bc9d0302a491f51422b/workshops/9_test_driven_development/slides.pdf
--------------------------------------------------------------------------------