Files
Library/docs/.vitepress/dist/rebel_coding/step3.html

41 lines
51 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Python | DreamFreely Library</title>
<meta name="description" content="Community Conscious Creations">
<meta name="generator" content="VitePress v2.0.0-alpha.15">
<link rel="preload stylesheet" href="/assets/style.tE5om2fv.css" as="style">
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
<script type="module" src="/assets/app.D2von411.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/theme.CAK4ts65.js">
<link rel="modulepreload" href="/assets/chunks/framework.j4Nev8bF.js">
<link rel="modulepreload" href="/assets/rebel_coding_step3.md.CFJMlHnF.lean.js">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-1df9f90f><!--[--><!--]--><!--[--><span tabindex="-1" data-v-331ec75c></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-331ec75c>Skip to content</a><!--]--><!----><header class="VPNav" data-v-1df9f90f data-v-da52a441><div class="VPNavBar" data-v-da52a441 data-v-70946a35><div class="wrapper" data-v-70946a35><div class="container" data-v-70946a35><div class="title" data-v-70946a35><div class="VPNavBarTitle has-sidebar" data-v-70946a35 data-v-1e38c6bc><a class="title" href="/" data-v-1e38c6bc><!--[--><!--]--><!----><span data-v-1e38c6bc>DreamFreely Library</span><!--[--><!--]--></a></div></div><div class="content" data-v-70946a35><div class="content-body" data-v-70946a35><!--[--><!--]--><div class="VPNavBarSearch search" data-v-70946a35><!----></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-70946a35 data-v-39714824><span id="main-nav-aria-label" class="visually-hidden" data-v-39714824> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/welcome/" tabindex="0" data-v-39714824 data-v-52a1d768><!--[--><span data-v-52a1d768>Welcome</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/welcome/support.html" tabindex="0" data-v-39714824 data-v-52a1d768><!--[--><span data-v-52a1d768>Support</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-70946a35 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-70946a35 data-v-0394ad82 data-v-d07f11e6><!--[--><a class="VPSocialLink no-icon" href="https://canin.dreamfreely.org" aria-label="org" target="_blank" rel="me noopener" data-v-d07f11e6 data-v-591a6b30><span class="vpi-social-org"></span></a><a class="VPSocialLink no-icon" href="https://shop.dreamfreely.org" aria-label="kitsu" target="_blank" rel="me noopener" data-v-d07f11e6 data-v-591a6b30><span class="vpi-social-kitsu"></span></a><a class="VPSocialLink no-icon" href="https://appdeveloperone.com/DreamFreely" aria-label="zcool" target="_blank" rel="me noopener" data-v-d07f11e6 data-v-591a6b30><span class="vpi-social-zcool"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-70946a35 data-v-bf2fac68 data-v-42cb505d><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-42cb505d><span class="vpi-more-horizontal icon" data-v-42cb505d></span></button><div class="menu" data-v-42cb505d><div class="VPMenu" data-v-42cb505d data-v-25a6cce8><!----><!--[--><!--[--><!----><div class="group" data-v-bf2fac68><div class="item appearance" data-v-bf2fac68><p class="label" data-v-bf2fac68>Appearance</p><div class="appearance-action" data-v-bf2fac68><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bf2fac68 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bf2fac68><div class="item social-links" data-v-bf2fac68><div class="VPSocialLinks social-links-list" data-v-bf2fac68 data-v-d07f11e6><!--[--><a class="VPSocialLink no-icon" href="https://canin.dreamfreely.org" aria-label="org" target="_blank" rel="me noopener" data-v-d07f11e6 data-v-591a6b30><span class="vpi-social-org"></span></a><a class="VPSocialLink no-icon" href="https://shop.dreamfreely.org" aria-label="kitsu" target="_blank" rel="me noopener" data-v-d07f11e6 data-v-591a6b30><span class="vpi-social-kitsu"></span></a><a class="VPSocialLink no-icon" href="https://appdeveloperone.com/DreamFreely" aria-label="zcool" target="_blank" rel="me noopener" data-v-d07f11e6 data-v-591a6b30><span class="vpi-social-zcool"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-70946a35 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-70946a35><div class="divider-line" data-v-70946a35></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-1df9f90f data-v-db738f89><div class="container" data-v-db738f89><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-db738f89><span class="vpi-align-left menu-icon" data-v-db738f89></span><span class="menu-text" data-v-db738f89>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-db738f89 data-v-0bf0e06f><button data-v-0bf0e06f>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-1df9f90f data-v-af661f50><div class="curtain" data-v-af661f50></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-af661f50><span class="visually-hidden" id="sidebar-aria-label" data-v-af661f50> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-8d50c081><section class="VPSidebarItem level-0" data-v-8d50c081 data-v-d81de50c><div class="item" role="button" tabindex="0" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><h2 class="text" data-v-d81de50c>Welcome</h2><!----></div><div class="items" data-v-d81de50c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/welcome/" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Chibu / Hola / Hello</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/welcome/dreamfreely.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>About DreamFreely</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/welcome/canin.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>About Canin Carlos</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-8d50c081><section class="VPSidebarItem level-0" data-v-8d50c081 data-v-d81de50c><div class="item" role="button" tabindex="0" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><h2 class="text" data-v-d81de50c>EXO-CTO</h2><!----></div><div class="items" data-v-d81de50c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/exocto/" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Welcome</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/exocto/puters.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Computers</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/exocto/oses.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>OSes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/exocto/websites.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Websites</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/exocto/socialmedia.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Social Media</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/exocto/automation.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Automation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/exocto/appendices.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Appendices</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-8d50c081><section class="VPSidebarItem level-0 has-active" data-v-8d50c081 data-v-d81de50c><div class="item" role="button" tabindex="0" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><h2 class="text" data-v-d81de50c>Rebel Coding 101</h2><!----></div><div class="items" data-v-d81de50c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/rebel_coding/" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Intro to Coding</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/rebel_coding/orientation.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Orientation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/rebel_coding/termintro.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Intro to CLI</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/rebel_coding/step1.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Step 1: HTML & CSS</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/rebel_coding/step2.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Step 2: JavaScript</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/rebel_coding/step3.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Step 3: Python Scrapers</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/rebel_coding/step4.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Step 4: The Full Stack</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/rebel_coding/appendices.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Appendices</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-8d50c081><section class="VPSidebarItem level-0" data-v-8d50c081 data-v-d81de50c><div class="item" role="button" tabindex="0" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><h2 class="text" data-v-d81de50c>Rebel Coding 102</h2><!----></div><div class="items" data-v-d81de50c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/rebel_coding/v2.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Reviewing the Full-Stack</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/rebel_coding/v2Orient.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Planning Our App</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/rebel_coding/step5.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Step 1: Server</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/rebel_coding/step6.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Step 2: Client</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/rebel_coding/step7.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Step 3: Deployment</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/rebel_coding/step8.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Step 4: Scaling, etc</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/rebel_coding/more-appendices.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>More Appendices</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-8d50c081><section class="VPSidebarItem level-0" data-v-8d50c081 data-v-d81de50c><div class="item" role="button" tabindex="0" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><h2 class="text" data-v-d81de50c>Manifesting Empathy</h2><!----></div><div class="items" data-v-d81de50c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/mempath/" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Welcome</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/mempath/egg.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>The Egg (0-5)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/mempath/hatchling.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>The Hatchling (5-12)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/mempath/flight.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Flight (12-18)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/mempath/flying.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Flying (18-25)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/mempath/learning.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Learning (25-35)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/mempath/building.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Building (35-45)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/mempath/helping.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Helping (45-60)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/mempath/enjoying.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Enjoying (60+)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/mempath/onward.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Outro</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/mempath/appendices.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Appendices</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-8d50c081><section class="VPSidebarItem level-0" data-v-8d50c081 data-v-d81de50c><div class="item" role="button" tabindex="0" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><h2 class="text" data-v-d81de50c>Diversity Inverted</h2><!----></div><div class="items" data-v-d81de50c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/divinv/" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Welcome</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/divinv/1-whiteness.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Whiteness</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/divinv/2-native.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Indigeneity</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/divinv/3-latinx.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Latinx</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/divinv/4-Black.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Blackness</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/divinv/5-onward.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Onwards</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/divinv/appendices.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Appendices</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-8d50c081><section class="VPSidebarItem level-0" data-v-8d50c081 data-v-d81de50c><!----><div class="items" data-v-d81de50c><!--[--><div class="VPSidebarItem level-1" data-v-d81de50c data-v-d81de50c><div class="item" role="button" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><p class="text" data-v-d81de50c>The Guidebook</p><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-8d50c081><section class="VPSidebarItem level-0" data-v-8d50c081 data-v-d81de50c><div class="item" role="button" tabindex="0" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><h2 class="text" data-v-d81de50c>Manifesting Empathy (archived)</h2><!----></div><div class="items" data-v-d81de50c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/mempath.bak/" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Welcome</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/mempath.bak/sexism.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Sexism</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/mempath.bak/racism.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Racism</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/mempath.bak/able-ism.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Able-ism</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/mempath.bak/power-dynamics.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Power Dynamics</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/mempath.bak/onward.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Onwards</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-d81de50c data-v-d81de50c><div class="item" data-v-d81de50c><div class="indicator" data-v-d81de50c></div><a class="VPLink link link" href="/mempath.bak/appendices.html" data-v-d81de50c><!--[--><p class="text" data-v-d81de50c>Appendices</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-1df9f90f data-v-c87f25bf><div class="VPDoc has-sidebar has-aside" data-v-c87f25bf data-v-7011f0d8><!--[--><!--]--><div class="container" data-v-7011f0d8><div class="aside" data-v-7011f0d8><div class="aside-curtain" data-v-7011f0d8></div><div class="aside-container" data-v-7011f0d8><div class="aside-content" data-v-7011f0d8><div class="VPDocAside" data-v-7011f0d8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-60d5052e><div class="content" data-v-60d5052e><div class="outline-marker" data-v-60d5052e></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-60d5052e>On this page</div><ul class="VPDocOutlineItem root" data-v-60d5052e data-v-1ce71065><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-7011f0d8><div class="content-container" data-v-7011f0d8><!--[--><!--]--><main class="main" data-v-7011f0d8><div style="position:relative;" class="vp-doc _rebel_coding_step3" data-v-7011f0d8><div><h1 id="python" tabindex="-1">Python <a class="header-anchor" href="#python" aria-label="Permalink to “Python”"></a></h1><hr><p>What if you could automate processes in your building … but not just simple processes - intensive analysis and creation ?</p><p>Enter Python!</p><p>Python has access to systems level functionality allowing it to interact with the hardware in a larger variety of ways!</p><p>And though this is a bit more of a detailed tutorial, compared to what we&#39;ve already done; we&#39;ll still stay in the shallow end of the pool for writing our first scraper.</p><p>There are few tools that one can use to bypass the method outlined belows; Beautiful Soup is one such tool. Though we&#39;re gonna opt for directly using the toolset around which Beautiful Soup is built.</p><blockquote><p>QN: A quick note about Package Managers</p></blockquote><p>Package managers ... manage the packages, libraries and software our systems use.</p><p>If you are using Ubuntu, you will likely be using a package manager called <code>apt</code>, Mac users may be using one called <code>homebrew</code>, while Windows users can use one called <code>chocolatey</code>.</p><p>Individual languages can also have their own package managers.</p><p>NodeJS has <code>npm</code>, Ruby uses a tool called RubyGems, and Python uses <code>pip</code>.</p><p>Depending on your chose operating system, you will need to learn how to use your operating systems package manager, and subsequently acquire <code>pip</code> for Python.</p><p>For those wanting to dive in head first, you can check out the official <code>pip</code> documentation: <a href="https://pip.pypa.io/en/stable/installing/" target="_blank" rel="noreferrer">https://pip.pypa.io/en/stable/installing/</a>.</p><p>Make sure to read the warnings.</p><p>Alright, let&#39;s dig in!!!</p><h2 id="your-first-python-scraper" tabindex="-1">#Your First Python Scraper <a class="header-anchor" href="#your-first-python-scraper" aria-label="Permalink to “#Your First Python Scraper”"></a></h2><h3 id="prep-virtual-environment" tabindex="-1">Prep Virtual Environment <a class="header-anchor" href="#prep-virtual-environment" aria-label="Permalink to “Prep Virtual Environment”"></a></h3><p>Now that we&#39;ve got <code>pip</code>, we want to the ability to make Python <em>virtual environments</em>.</p><p>The reason we want to use a <em>virtual environment</em> is to keep our systems <em>clean</em>.</p><p>We will be downloading quite a few Python packages that may not be necessary afterwards; or that may interfere with packages we want to use later.</p><p>In short, uing virtual environments allows such keep the packages utilized for each project we pursue compartmentalized.</p><p>The command to run is <code>pip install virtualenv</code>; bells will ring, whistles will be blown, and when it&#39;s all done; you&#39;ll have Python Virtual Environments accessible on your computer!</p><h3 id="start-venv-install-lxml" tabindex="-1">Start VEnv &amp; Install LXML <a class="header-anchor" href="#start-venv-install-lxml" aria-label="Permalink to “Start VEnv &amp; Install LXML”"></a></h3><p>Next week need to create a virtual environment.</p><p>In order to spin-up our virtual environment we run the following command:</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span> virtualenv pickYourOwnName</span></span></code></pre></div><p>More bells and whistles will sound, and when it&#39;s all down we&#39;ll have a new folder into which we will <code>cd</code>.</p><p>There are three folders that are created within our new folder; though for the sake of introductions and brevity, I will only highlight the following two:</p><p><code>bin</code> - this is where the commands for our virtual environment reside. <code>lib</code> - here is where all of our environments packages will reside.</p><p>In order to activate our virtual environment, from within our newly created folder run the command <code>source bin/activate</code>.</p><p>And next we will acquire the base packages we need to begin scraping:</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span> pip install requests</span></span>
<span class="line"><span> pip install lxml</span></span></code></pre></div><p>Error: If you get an error when trying to install LXML, that is totally natural and reasonable. Sometimes, some may say, that&#39;s the benefit of using a tool such as Beautiful Soup, it manages many dependencies, so that new users don&#39;t have to.</p><p>Though in truth, the effort required to supply LXML&#39;s dependencies are relatively minimal.</p><p>The package depends on a series of <code>c</code> files; for Mac users, admittedly, this may require acquiring and updating XCode to include their Command Line Tools package.</p><p>For Windows users may have their own issues, regarding Visual C++ components; notice that LXML is dependent on C-language packages.</p><p>If you run into any issues, this is your chance to check out what solutions others have found using your favorite search engine.</p><p>And if still unable to resolve the errors you receive, please reach out to <a href="mailto:canin@dreamfreely.org" target="_blank" rel="noreferrer">canin@dreamfreely.org</a>!</p><h3 id="create-new-python-file" tabindex="-1">Create New Python File <a class="header-anchor" href="#create-new-python-file" aria-label="Permalink to “Create New Python File”"></a></h3><p>Phew! We got through that entire process.</p><p>Congratuluation!!!</p><p>You&#39;ve done some great work so far; we&#39;re navigating the command-line to build a custom toolset.</p><p>That is no small accomplishment!</p><p>Next up, we start building.</p><p>Open up Notepad, or your favorite text editor, and create new file; naming it however you like, though with the <code>.py</code> extention at the end.</p><h3 id="import-libraries" tabindex="-1">Import Libraries <a class="header-anchor" href="#import-libraries" aria-label="Permalink to “Import Libraries”"></a></h3><p>Our process for building our scraper file is very similar to the steps we took when building our webpage.</p><p>First we need to gather our necessary tools.</p><p>On the first line of our file we will import our first package by typing the command <code>import requests</code>.</p><p>Yup, it is that easy; so next we will import the tools we need from LXML with the following command:</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span> from lxml import html</span></span></code></pre></div><p>Feels almost magically simple doesn&#39;t it ?</p><p>Lastly, lets grab one more toolset by adding the line</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span> from pprint import pprint as ppr</span></span></code></pre></div><p>This is a tool that will allow us to print our data in a more readable format.</p><p>So let&#39;s get to scraping!!</p><h3 id="get-site-requests" tabindex="-1">Get Site (requests) <a class="header-anchor" href="#get-site-requests" aria-label="Permalink to “Get Site (requests)”"></a></h3><p>What website do you want to scrape?</p><p>Mind you, some websites load their data using JavaScript (many websites do, in fact.)</p><p>And these websites will require additional tools to scrape.</p><p>Nonetheless, the command to <em>scrape</em> a website is as follows:</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span> root = requests.get(&#39;https://www.linux.org&#39;)</span></span></code></pre></div><p>Operations will happen in the background, and when all is said and done, we will have a variable called <code>root</code> which contains our webpage.</p><p>But it&#39;s a Python object, and there&#39;s a bunch of other info attached to the variable that we don&#39;t need right now ...</p><h3 id="extract-code-lxml-html" tabindex="-1">Extract Code (lxml.html) <a class="header-anchor" href="#extract-code-lxml-html" aria-label="Permalink to “Extract Code (lxml.html)”"></a></h3><p>Huzzah, this is where we will use the <code>html</code> tool we brought in from <code>lxml</code> by running the following command:</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span> base = html.fromstring(root.text)</span></span></code></pre></div><p>What we are doing is using the <code>html</code> tool to transform the <code>text</code> of the website&#39;s code into elements we can parse using another LMXL tool set.</p><h3 id="parse-code-xpath" tabindex="-1">Parse Code (xpath) <a class="header-anchor" href="#parse-code-xpath" aria-label="Permalink to “Parse Code (xpath)”"></a></h3><p>Enter XPATH!</p><blockquote><p>QN: Notice how HTML &amp; LXML both have the same two letters at the end of them; they stand for <em>markup language</em>. And yes they are related.</p></blockquote><p>XML stands for <em>Extensible Markup Language</em>; and XPATH is a tool we can use to traverse and parse code written in this language.</p><p>Our previous command <code>html.fromstring</code> transformed the text of our code into XML elements, with which we can use their <code>xpath</code> property to navigate and extract specific data.</p><p>A fun command to run is <code>base.xpath(&#39;.//*&#39;)</code> as this will show us all of the root elements of the code we transformed using <code>html.fromstring</code>; any of it look familiar?</p><p>Now let&#39;s dig a bit deeper.</p><p>In the example available in the <a href="https://github.com/RebelCoding/startScraping/blob/master/startScraping.py" target="_blank" rel="noreferrer">Rebel Coding startScraping repository</a> the example code runs the following command:</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span> items = base.xpath(&#39;.//*[@class=&quot;rgMasterTable&quot;]/tbody/tr&#39;)</span></span></code></pre></div><p>What we are doing here is traversing our <code>base</code> element to find <em>any</em> object with the <code>class</code> of <code>rgMasterTable</code>.</p><p>Within that element we want to dig a bit further to our <code>tbody</code> element, and finally, we want to grab <em>all</em> of the table rows contained!</p><p>We put all of these rows into our variable called <code>items</code>; and now we have a list of row elements we can cycle through to extract more specific data.</p><h3 id="organize-display-code" tabindex="-1">Organize &amp; Display Code <a class="header-anchor" href="#organize-display-code" aria-label="Permalink to “Organize &amp; Display Code”"></a></h3><p>In our example script from RebelCoding/startScraping we use the following code to process our newly acquired items:</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span> for i in items[:5]:</span></span>
<span class="line"><span> d = {}</span></span>
<span class="line"><span> title = i.xpath(&#39;.//td[1]/*/a/font/text()&#39;)</span></span>
<span class="line"><span> d[&#39;title&#39;] = title[0].strip()</span></span>
<span class="line"><span> d[&#39;link&#39;] = i.xpath(&#39;.//td[1]/*/a/@href&#39;)[0]</span></span>
<span class="line"><span> ppr(d)</span></span></code></pre></div><p>We use a <em>for-loop</em> to run through the first 5 items in our list of items; and the first thing we do is create an empty dictionary in which to store our desired information.</p><p>We do this so that we can more easily access this information later.</p><p>Next, we use XPATH to specify the information we&#39;re after.</p><p>XPATH returns a list of elements by default; and if there are not items, it will return an empty list.</p><p>If there is one item, it will return a list with one item; and so in our next line, we extract that singular item and apply the <code>strip()</code> method to remove any excess empty space on either side of our news acquired <code>title</code>.</p><p>On the next line we shorten this process a bit, by simply adding the index position <code>[0]</code> to the end of our <code>xpath</code> command.</p><p>Lastly we use the Python tool <em>pretty print</em> to display our newly acquired data.</p><p>In order to run our code, we navigate to our file&#39;s location; hopefully you&#39;ve saved it in our Virtual Environment&#39;s folder for ease of use.</p><p>And with our virtual environment activated we will run the command <code>python myFirstScrape.py</code>.</p><p>Though using whatever name you save your file as; having remembered the <code>.py</code> extension at the end.</p><p>Y&#39;all just wrote your first web scraper!!!</p><p>Pour your a delicious glass of your favorite beverage or commence any other suitably celebrative action ~ cause y&#39;all just did that!</p><h1 id="more-about-python" tabindex="-1">More About Python <a class="header-anchor" href="#more-about-python" aria-label="Permalink to “More About Python”"></a></h1><hr><p>We&#39;ve glossed over quite a bit just to get ourselves up and running.</p><p>The example script provided in the Rebel Coding startScraping repository goes a bit deeper; so definitely check that out.</p><p>Though now you know how to use the Python <code>requests</code> package to mechanically grab websites; and you know how to use LXML to read the code from those sites!</p><p>Now let&#39;s wrap up by learning about the <em>full stack</em>, by which many of these sites are built and run.</p><h1 id="python-classes-js-objects" tabindex="-1">Python Classes &amp; JS Objects <a class="header-anchor" href="#python-classes-js-objects" aria-label="Permalink to “Python Classes &amp; JS Objects”"></a></h1><hr><h1 id="python-datetime-structure" tabindex="-1">Python DateTime Structure <a class="header-anchor" href="#python-datetime-structure" aria-label="Permalink to “Python DateTime Structure”"></a></h1><hr><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span> for i in items[:5]:</span></span>
<span class="line"><span> d = {}</span></span>
<span class="line"><span> title = i.xpath(&#39;.//td[1]/*/a/font/text()&#39;)</span></span>
<span class="line"><span> d[&#39;title&#39;] = title[0].strip()</span></span>
<span class="line"><span> d[&#39;link&#39;] = i.xpath(&#39;.//td[1]/*/a/@href&#39;)[0]</span></span>
<span class="line"><span> date = i.xpath(&#39;.//td[2]/font/text()&#39;)</span></span>
<span class="line"><span> time = i.xpath(&#39;.//td[4]/font/span/font/text()&#39;)</span></span>
<span class="line"><span> time_complete = &quot; &quot;.join(date + time)</span></span>
<span class="line"><span> format_date = &#39;%m/%d/%Y %I:%M %p&#39;</span></span>
<span class="line"><span> d[&#39;real_date&#39;] = datetime.strptime(time_complete, format_date)</span></span>
<span class="line"><span> ppr(d)</span></span></code></pre></div><h1 id="reading-writing-csv-json" tabindex="-1">Reading &amp; Writing CSV/JSON <a class="header-anchor" href="#reading-writing-csv-json" aria-label="Permalink to “Reading &amp; Writing CSV/JSON”"></a></h1><hr></div></div></main><footer class="VPDocFooter" data-v-7011f0d8 data-v-e257564d><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/rebel_coding/step2.html" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>Step 2: JavaScript</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/rebel_coding/step4.html" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>Step 4: The Full Stack</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"api-examples.md\":\"x63WI4Pt\",\"df_guide_1_basic_psych.md\":\"CeMcMmuh\",\"df_guide_2_medi_vibes.md\":\"DXqrKVuP\",\"df_guide_3_with_loneliness.md\":\"CCm6CpFp\",\"df_guide_4_enter_alchemy.md\":\"C_rmpGLw\",\"df_guide_5_test_ethic.md\":\"CLeadJfH\",\"df_guide_6_social_physics.md\":\"DLXBEao5\",\"df_guide_7_quantum_realm.md\":\"DLdBPsJT\",\"df_guide_8_topol.md\":\"Ba9e4UzJ\",\"df_guide_appendices.md\":\"B6_t-HyW\",\"df_guide_index.md\":\"CEtKw1LU\",\"divinv_1-whiteness.md\":\"Gp4URLax\",\"divinv_2-native.md\":\"Vv8EGUun\",\"divinv_3-latinx.md\":\"BM4bdmUR\",\"divinv_4-black.md\":\"CUehWxOs\",\"divinv_5-onward.md\":\"CEQkr_Yq\",\"divinv_appendices.md\":\"Bmbs9w04\",\"divinv_index.md\":\"Bqo_SiH4\",\"exocto_analytics.md\":\"BKJsN1AA\",\"exocto_appendices.md\":\"Dni294_f\",\"exocto_automation.md\":\"CN2PTACp\",\"exocto_comphist.md\":\"DjMbLIzP\",\"exocto_cooltools.md\":\"BTNgrA0k\",\"exocto_index.md\":\"BXZZ5OdR\",\"exocto_licences.md\":\"DzIeU3HF\",\"exocto_mailinglists.md\":\"CnM_HnlB\",\"exocto_oses.md\":\"BCY-PpoW\",\"exocto_payments.md\":\"CrBxLlhh\",\"exocto_puters.md\":\"B4Y0cwIr\",\"exocto_seo101.md\":\"DviR7H5g\",\"exocto_socialmedia.md\":\"C39W_iye\",\"exocto_websites.md\":\"q-QXL0De\",\"index.1.md\":\"BirqA0z4\",\"index.md\":\"CpG2gthS\",\"markdown-examples.md\":\"CUSHEXel\",\"mempath.bak_able-ism.md\":\"DEEoY8Vi\",\"mempath.bak_appendices.md\":\"CmQnH-55\",\"mempath.bak_gender-studies.md\":\"Bm3aYqIc\",\"mempath.bak_index.md\":\"CjZxMHAK\",\"mempath.bak_notes.huggingface.md\":\"Khx3__Av\",\"mempath.bak_onward.md\":\"BVZnlB_v\",\"mempath.bak_openai.playground.md\":\"DWJTSwWP\",\"mempath.bak_outline.huggingface.md\":\"rtMna0fM\",\"mempath.bak_power-dynamics.md\":\"BpdS-0SU\",\"mempath.bak_racism.md\":\"DZ9tBx6B\",\"mempath.bak_sexism.md\":\"BEBA033J\",\"mempath_appendices.md\":\"Czbekzrn\",\"mempath_building.md\":\"DiuxWTcR\",\"mempath_egg.md\":\"CisKm_IF\",\"mempath_enjoying.md\":\"B4curKmU\",\"mempath_flight.md\":\"CVDxb1-C\",\"mempath_flying.md\":\"B6DOnD8x\",\"mempath_hatchling.md\":\"VVGsZ3N1\",\"mempath_helping.md\":\"P__Igwr5\",\"mempath_index.md\":\"Cvas8zRV\",\"mempath_learning.md\":\"BgKY3mQI\",\"mempath_onward.md\":\"QQAwPgA6\",\"rebel_coding_appendices.md\":\"hih51f2p\",\"rebel_coding_index.md\":\"C9eQ2DYw\",\"rebel_coding_orientation.md\":\"DBUP6Scl\",\"rebel_coding_step1.md\":\"UGFgpiDv\",\"rebel_coding_step2.md\":\"g93kTiCg\",\"rebel_coding_step3.md\":\"CFJMlHnF\",\"rebel_coding_step4.md\":\"cGlIZ8RL\",\"rebel_coding_step5.md\":\"D7qbvCYY\",\"rebel_coding_step6.md\":\"KTPIgYna\",\"rebel_coding_step7.md\":\"D0XOrhEO\",\"rebel_coding_step8.md\":\"K9SkXD8n\",\"rebel_coding_termintro.md\":\"FZ5Hz2Ty\",\"rebel_coding_v2.md\":\"BQnisPze\",\"rebel_coding_v2orient.md\":\"Cv5u-Osk\",\"welcome_canin.md\":\"CHq_tepX\",\"welcome_dreamfreely.md\":\"Bxqk9nt5\",\"welcome_index.md\":\"C9JoO6Kb\",\"welcome_support.md\":\"CYUo6QRX\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"DreamFreely Library\",\"description\":\"Community Conscious Creations\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"Welcome\",\"link\":\"/welcome/\"},{\"text\":\"Support\",\"link\":\"/welcome/support\"}],\"sidebar\":[{\"text\":\"Welcome\",\"items\":[{\"text\":\"Chibu / Hola / Hello\",\"link\":\"/welcome/\"},{\"text\":\"About DreamFreely\",\"link\":\"/welcome/dreamfreely\"},{\"text\":\"About Canin Carlos\",\"link\":\"/welcome/canin\"}]},{\"text\":\"EXO-CTO\",\"items\":[{\"text\":\"Welcome\",\"link\":\"/exocto/\"},{\"text\":\"Computers\",\"link\":\"/exocto/puters\"},{\"text\":\"OSes\",\"link\":\"/exocto/oses\"},{\"text\":\"Websites\",\"link\":\"/exocto/websites\"},{\"text\":\"Social Media\",\"link\":\"/exocto/socialmedia\"},{\"text\":\"Automation\",\"link\":\"/exocto/automation\"},{\"text\":\"Appendices\",\"link\":\"/exocto/appendices\"}]},{\"text\":\"Rebel Coding 101\",\"items\":[{\"text\":\"Intro to Coding\",\"link\":\"/rebel_coding/\"},{\"text\":\"Orientation\",\"link\":\"/rebel_coding/orientation\"},{\"text\":\"Intro to CLI\",\"link\":\"/rebel_coding/termintro\"},{\"text\":\"Step 1: HTML & CSS\",\"link\":\"/rebel_coding/step1\"},{\"text\":\"Step 2: JavaScript\",\"link\":\"/rebel_coding/step2\"},{\"text\":\"Step 3: Python Scrapers\",\"link\":\"/rebel_coding/step3\"},{\"text\":\"Step 4: The Full Stack\",\"link\":\"/rebel_coding/step4\"},{\"text\":\"Appendices\",\"link\":\"/rebel_coding/appendices\"}]},{\"text\":\"Rebel Coding 102\",\"items\":[{\"text\":\"Reviewing the Full-Stack\",\"link\":\"/rebel_coding/v2\"},{\"text\":\"Planning Our App\",\"link\":\"/rebel_coding/v2Orient\"},{\"text\":\"Step 1: Server\",\"link\":\"/rebel_coding/step5\"},{\"text\":\"Step 2: Client\",\"link\":\"/rebel_coding/step6\"},{\"text\":\"Step 3: Deployment\",\"link\":\"/rebel_coding/step7\"},{\"text\":\"Step 4: Scaling, etc\",\"link\":\"/rebel_coding/step8\"},{\"text\":\"More Appendices\",\"link\":\"/rebel_coding/more-appendices\"}]},{\"text\":\"Manifesting Empathy\",\"items\":[{\"text\":\"Welcome\",\"link\":\"/mempath/\"},{\"text\":\"The Egg (0-5)\",\"link\":\"/mempath/egg\"},{\"text\":\"The Hatchling (5-12)\",\"link\":\"/mempath/hatchling\"},{\"text\":\"Flight (12-18)\",\"link\":\"/mempath/flight\"},{\"text\":\"Flying (18-25)\",\"link\":\"/mempath/flying\"},{\"text\":\"Learning (25-35)\",\"link\":\"/mempath/learning\"},{\"text\":\"Building (35-45)\",\"link\":\"/mempath/building\"},{\"text\":\"Helping (45-60)\",\"link\":\"/mempath/helping\"},{\"text\":\"Enjoying (60+)\",\"link\":\"/mempath/enjoying\"},{\"text\":\"Outro\",\"link\":\"/mempath/onward\"},{\"text\":\"Appendices\",\"link\":\"/mempath/appendices\"}]},{\"text\":\"Diversity Inverted\",\"items\":[{\"text\":\"Welcome\",\"link\":\"/divinv/\"},{\"text\":\"Whiteness\",\"link\":\"/divinv/1-whiteness\"},{\"text\":\"Indigeneity\",\"link\":\"/divinv/2-native\"},{\"text\":\"Latinx\",\"link\":\"/divinv/3-latinx\"},{\"text\":\"Blackness\",\"link\":\"/divinv/4-Black\"},{\"text\":\"Onwards\",\"link\":\"/divinv/5-onward\"},{\"text\":\"Appendices\",\"link\":\"/divinv/appendices\"}]},{\"text\":\"The Guidebook\"},{\"text\":\"Manifesting Empathy (archived)\",\"items\":[{\"text\":\"Welcome\",\"link\":\"/mempath.bak/\"},{\"text\":\"Sexism\",\"link\":\"/mempath.bak/sexism\"},{\"text\":\"Racism\",\"link\":\"/mempath.bak/racism\"},{\"text\":\"Able-ism\",\"link\":\"/mempath.bak/able-ism\"},{\"text\":\"Power Dynamics\",\"link\":\"/mempath.bak/power-dynamics\"},{\"text\":\"Onwards\",\"link\":\"/mempath.bak/onward\"},{\"text\":\"Appendices\",\"link\":\"/mempath.bak/appendices\"}]}],\"socialLinks\":[{\"icon\":\"org\",\"link\":\"https://canin.dreamfreely.org\"},{\"icon\":\"kitsu\",\"link\":\"https://shop.dreamfreely.org\"},{\"icon\":\"zcool\",\"link\":\"https://appdeveloperone.com/DreamFreely\"}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false,\"additionalConfig\":{}}");</script>
</body>
</html>