├── .github └── workflows │ └── deploy-lc.yml ├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── build ├── exts ├── __init__.py ├── admonition_icons.py ├── external_links.py ├── ordered_toctree.py ├── replit.py └── youtube.py ├── requirements.txt ├── src ├── _static │ ├── css │ │ ├── fonts │ │ │ ├── Nexa-Regular-Italic.otf │ │ │ ├── Nexa-XBold-Italic.otf │ │ │ ├── Nexa-XBold.otf │ │ │ └── NexaRegular.otf │ │ ├── launchcode.css │ │ └── site.css │ ├── fa │ │ ├── css │ │ │ ├── all.css │ │ │ ├── all.min.css │ │ │ ├── brands.css │ │ │ ├── brands.min.css │ │ │ ├── fontawesome.css │ │ │ ├── fontawesome.min.css │ │ │ ├── regular.css │ │ │ ├── regular.min.css │ │ │ ├── solid.css │ │ │ ├── solid.min.css │ │ │ ├── svg-with-js.css │ │ │ ├── svg-with-js.min.css │ │ │ ├── v4-shims.css │ │ │ └── v4-shims.min.css │ │ └── webfonts │ │ │ ├── fa-brands-400.eot │ │ │ ├── fa-brands-400.svg │ │ │ ├── fa-brands-400.ttf │ │ │ ├── fa-brands-400.woff │ │ │ ├── fa-brands-400.woff2 │ │ │ ├── fa-regular-400.eot │ │ │ ├── fa-regular-400.svg │ │ │ ├── fa-regular-400.ttf │ │ │ ├── fa-regular-400.woff │ │ │ ├── fa-regular-400.woff2 │ │ │ ├── fa-solid-900.eot │ │ │ ├── fa-solid-900.svg │ │ │ ├── fa-solid-900.ttf │ │ │ ├── fa-solid-900.woff │ │ │ └── fa-solid-900.woff2 │ └── images │ │ └── logos │ │ ├── codergirl-white.png │ │ ├── lc-ed-logo.png │ │ └── lc-logo.svg ├── _templates │ ├── layout.html │ └── navbar.html ├── classes │ ├── 1.rst │ ├── 2.rst │ ├── 3.rst │ ├── 4.rst │ ├── 5.rst │ ├── 6.rst │ ├── 7.rst │ └── 8.rst ├── conf.py ├── genindex.rst ├── index-full.rst ├── index.rst ├── modules │ ├── assignments │ │ ├── deployment.rst │ │ ├── figures │ │ │ └── dropbox-download.png │ │ ├── live-coding.rst │ │ ├── mock-interview.rst │ │ ├── online-profiles.rst │ │ ├── presentation-demo.pdf │ │ ├── project-outline.rst │ │ ├── project-planning.rst │ │ ├── project-presentation.rst │ │ ├── project-review.rst │ │ └── project-setup.rst │ ├── career │ │ ├── figures │ │ │ ├── alan_turing_profile_picture.jpg │ │ │ ├── copy-doc.png │ │ │ ├── github_pinned_repo.png │ │ │ ├── interview-questions-chart.png │ │ │ ├── resume-format-1.png │ │ │ ├── resume-format-2.png │ │ │ ├── resume-guide.png │ │ │ ├── resume-template-links.png │ │ │ └── share-doc.png │ │ ├── interviewing.rst │ │ ├── live-coding.rst │ │ ├── online-profiles.rst │ │ └── tech-interview.rst │ ├── demo-projects │ │ ├── event-log │ │ │ ├── figures │ │ │ │ ├── create_event_form.png │ │ │ │ ├── create_event_form_new.png │ │ │ │ ├── event-log-login.png │ │ │ │ ├── event-log-logout.png │ │ │ │ ├── event-log-register.png │ │ │ │ ├── event-log-welcome.png │ │ │ │ ├── event_details_view.png │ │ │ │ ├── event_details_view_new.png │ │ │ │ ├── event_error_message.png │ │ │ │ ├── event_listing_view.png │ │ │ │ ├── event_listing_view_new.png │ │ │ │ ├── initial-commits.png │ │ │ │ ├── sprint_1_stories.png │ │ │ │ ├── sprint_2_commits.png │ │ │ │ ├── sprint_2_commits_2.png │ │ │ │ ├── sprint_2_stories.png │ │ │ │ ├── sprint_2_stories_2.png │ │ │ │ ├── sprint_3_commits_1.png │ │ │ │ ├── sprint_3_commits_2.png │ │ │ │ ├── sprint_3_stories_1.png │ │ │ │ ├── sprint_3_stories_2.png │ │ │ │ ├── sprint_4_commits_1.png │ │ │ │ ├── sprint_4_stories.png │ │ │ │ └── sprint_4_stories_2.png │ │ │ ├── index.rst │ │ │ └── project-presentation.pdf │ │ ├── expense-tracker │ │ │ ├── Expense_Tracker_Presentation.pdf │ │ │ ├── figures │ │ │ │ ├── expense-tracker-archive-category.png │ │ │ │ ├── expense-tracker-change-email-1.png │ │ │ │ ├── expense-tracker-change-email-2.png │ │ │ │ ├── expense-tracker-change-password-1.png │ │ │ │ ├── expense-tracker-change-password-2.png │ │ │ │ ├── expense-tracker-create-category-1.png │ │ │ │ ├── expense-tracker-create-category.JPG │ │ │ │ ├── expense-tracker-create-category.png │ │ │ │ ├── expense-tracker-create-expense.JPG │ │ │ │ ├── expense-tracker-create-expense.png │ │ │ │ ├── expense-tracker-delete-expense-1.png │ │ │ │ ├── expense-tracker-delete-expense-2.png │ │ │ │ ├── expense-tracker-edit-expense-2.png │ │ │ │ ├── expense-tracker-edit-expense1.png │ │ │ │ ├── expense-tracker-initial-commit.png │ │ │ │ ├── expense-tracker-login.JPG │ │ │ │ ├── expense-tracker-login.png │ │ │ │ ├── expense-tracker-menu.JPG │ │ │ │ ├── expense-tracker-register.JPG │ │ │ │ ├── expense-tracker-register.png │ │ │ │ ├── expense-tracker-unarchive-category.png │ │ │ │ ├── expense-tracker-view-categories.png │ │ │ │ ├── expense-tracker-view-expenses.png │ │ │ │ ├── expense-tracker-wireframes.JPG │ │ │ │ ├── sprint_1_stories.png │ │ │ │ ├── sprint_2_commits.png │ │ │ │ ├── sprint_2_commits_2.png │ │ │ │ ├── sprint_2_commits_3.png │ │ │ │ ├── sprint_2_stories.png │ │ │ │ ├── sprint_2_stories_2.png │ │ │ │ ├── sprint_2_stories_3.png │ │ │ │ ├── sprint_3_commits_1.png │ │ │ │ ├── sprint_3_commits_final.png │ │ │ │ ├── sprint_3_stories_1.png │ │ │ │ ├── sprint_3_stories_2.png │ │ │ │ ├── sprint_4_commits_1.png │ │ │ │ └── sprint_4_stories.png │ │ │ └── index.rst │ │ └── index.rst │ ├── git │ │ ├── figures │ │ │ ├── active-github-profile.png │ │ │ ├── add-comment.png │ │ │ ├── approve-changes.png │ │ │ ├── assign-pr.png │ │ │ ├── confirm-merge-button.png │ │ │ ├── create-pr-form.png │ │ │ ├── create-pr-from-branch.png │ │ │ ├── delete-branch.png │ │ │ ├── github_issues_1.png │ │ │ ├── github_issues_2.png │ │ │ ├── github_issues_3.png │ │ │ ├── github_issues_4.png │ │ │ ├── github_issues_5.png │ │ │ ├── merge-button.png │ │ │ └── reply-after-fixing-code.png │ │ ├── git-commits.rst │ │ ├── git-refresher.rst │ │ ├── git-setup.rst │ │ ├── git-workflow.rst │ │ └── github-issues.rst │ ├── index.rst │ ├── intro │ │ ├── liftoff-overview.rst │ │ └── setup.rst │ └── project │ │ ├── deploying-java-apps.rst │ │ ├── figures │ │ └── sql-export.png │ │ ├── git.rst │ │ ├── licensing.rst │ │ ├── logging-java-apps.rst │ │ ├── user-stories.rst │ │ └── wireframes.rst └── todos.rst └── update-theme.sh /.github/workflows/deploy-lc.yml: -------------------------------------------------------------------------------- 1 | name: LC GitHub Pages 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | deploy: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@master 13 | 14 | - name: Setup Python 15 | uses: actions/setup-python@master 16 | with: 17 | python-version: '3.9' 18 | 19 | - name: Upgrade pip 20 | run: | 21 | # install pip=>20.1 to use "pip cache dir" 22 | python3 -m pip install --upgrade pip 23 | 24 | - name: Get pip cache dir 25 | id: pip-cache 26 | run: | 27 | echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT 28 | 29 | - name: Cache dependencies 30 | uses: actions/cache@master 31 | with: 32 | path: ${{ steps.pip-cache.outputs.dir }} 33 | key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} 34 | restore-keys: | 35 | ${{ runner.os }}-pip- 36 | 37 | - name: Build Project Artifacts 38 | run: python3 -m pip install -r ./requirements.txt 39 | - run: sphinx-build src docs 40 | 41 | - name: Deploy to GitHub Pages 42 | uses: peaceiris/actions-gh-pages@v3 43 | with: 44 | github_token: ${{ secrets.GITHUB_TOKEN }} 45 | publish_dir: ./docs 46 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | _build/ 3 | .vscode 4 | !.nojekyll 5 | .pyc 6 | pdf/ 7 | .idea/ 8 | __pycache__/ 9 | docs/ 10 | .travis.yml 11 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: true 2 | cache: pip 3 | python: "3.9" 4 | language: python 5 | 6 | if: type = push AND branch = master 7 | 8 | install: # install dependencies (cached) 9 | - pip install -r requirements.txt 10 | 11 | script: 12 | - ./build -c # run clean build 13 | - mv docs/ gh-pages/ 14 | 15 | deploy: 16 | provider: pages # github pages provider 17 | on: 18 | branch: 19 | - master 20 | skip_cleanup: true # save the build output (artifact) 21 | local_dir: gh-pages # the directory to deploy to GH pages 22 | target_branch: gh-pages # branch to push to 23 | github_token: $GITHUB_ACCESS_TOKEN # access token with repo:public scope 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # About this Repository 2 | 3 | This repository is a template used by the LaunchCode Education team for creating LaunchCode education sites for LaunchCode classes. 4 | 5 | ## Sites that use this template 6 | 7 | [Introduction to Professional Web Development in JavaScript](https://education.launchcode.org/intro-to-professional-web-dev/) 8 | 9 | [Java Web Development](https://education.launchcode.org/java-web-development/) 10 | 11 | [C# Web Development](https://education.launchcode.org/csharp-web-development/) 12 | 13 | ## How to Use this Repository 14 | 15 | This template is derived from [LaunchCode's Curriculum Module Template](https://github.com/LaunchCodeEducation/curriculum-module-template) and used for original LaunchCode Education content. 16 | 17 | When creating a new LaunchCode Education book, use this template as a starting point and add it as a remote repository so that you may pull down updates made to it into your book. 18 | 19 | ### Customize conf.py 20 | 21 | Change ``site_theme_options.navbar_title`` and ``project`` to match your curriculum content. 22 | -------------------------------------------------------------------------------- /build: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | builder=html-a11y 4 | 5 | key="$1" 6 | 7 | case $key in 8 | -h|--help) 9 | cat < 0 22 | 23 | 24 | class AccessibleHTMLTranslator(HTMLTranslator): 25 | 26 | def visit_bullet_list(self, node): 27 | # type: (nodes.Node) -> None 28 | if len(node) == 1 and node[0].tagname == 'toctree': 29 | # avoid emitting empty
    30 | raise nodes.SkipNode 31 | atts = {} 32 | old_compact_simple = self.compact_simple 33 | self.context.append((self.compact_simple, self.compact_p)) 34 | self.compact_p = None 35 | self.compact_simple = self.is_compactable(node) 36 | if self.compact_simple and not old_compact_simple: 37 | atts['class'] = 'simple' 38 | if is_toctree_node(node): 39 | self.body.append(self.starttag(node, 'ol', **atts)) 40 | else: 41 | self.body.append(self.starttag(node, 'ul', **atts)) 42 | 43 | def depart_bullet_list(self, node): 44 | self.compact_simple, self.compact_p = self.context.pop() 45 | if is_toctree_node(node): 46 | self.body.append('\n') 47 | else: 48 | self.body.append('\n') 49 | 50 | 51 | def setup(app): 52 | app.add_builder(AccessibleHTMLBuilder) 53 | -------------------------------------------------------------------------------- /exts/replit.py: -------------------------------------------------------------------------------- 1 | from docutils import nodes 2 | from docutils.parsers.rst import directives, Directive 3 | from sphinx.directives.code import CodeBlock 4 | 5 | 6 | 7 | def setup(app): 8 | app.add_config_value('replit_user', '', 'html') 9 | app.add_directive('replit', ReplIt) 10 | return {'version': '0.1'} 11 | 12 | 13 | class ReplIt(CodeBlock): 14 | 15 | option_spec = { 16 | 'linenos': directives.flag, 17 | 'slug': directives.unchanged 18 | } 19 | 20 | url_template = "https://repl.it/@%s/%s" 21 | 22 | def run(self): 23 | replit_user = self.state.document.settings.env.app.config['replit_user'] 24 | code_node = super(ReplIt, self).run()[0] 25 | ref_node = nodes.reference('', '') 26 | ref_node['refuri'] = self.url_template % (replit_user, self.options['slug']) 27 | ref_node += nodes.Text('repl.it', 'repl.it') 28 | para_nodes = nodes.paragraph() 29 | para_nodes += ref_node 30 | para_nodes['classes'] = ['repl-link'] 31 | return [code_node, para_nodes] 32 | -------------------------------------------------------------------------------- /exts/youtube.py: -------------------------------------------------------------------------------- 1 | from docutils import nodes 2 | from docutils.parsers.rst import directives, Directive 3 | 4 | 5 | def setup(app): 6 | app.add_config_value('youtube_user', '', 'html') 7 | app.add_directive('youtube', YouTube) 8 | return {'version': '0.1'} 9 | 10 | 11 | class YouTube(Directive): 12 | 13 | GITHUB_URL_TEMPLATE = "https://github.com/{github_user}/{repo}/tree/{branch}" 14 | YOUTUBE_EMBED_TEMPLATE = """ 15 |
    16 | """ 17 | 18 | required_arguments = 0 19 | final_argument_whitespace = True 20 | has_content = False 21 | 22 | option_spec = { 23 | 'video_id': directives.unchanged, 24 | 'gh_path': directives.unchanged, 25 | } 26 | 27 | url_template = "https://repl.it/@%s/%s" 28 | 29 | def run(self): 30 | 31 | vid_params = { 32 | 'video_id': self.options['video_id'], 33 | } 34 | 35 | if 'gh_path' in self.options and len(self.options['gh_path'].split('/')) == 3: 36 | parts = self.options['gh_path'].split('/') 37 | gh_params = { 38 | 'github_user': parts[0], 39 | 'repo': parts[1], 40 | 'branch': parts[2], 41 | } 42 | else: 43 | gh_params = {} 44 | 45 | params = {**vid_params, **gh_params} 46 | 47 | text = self.YOUTUBE_EMBED_TEMPLATE.format(**params) 48 | 49 | para_nodes = nodes.paragraph() 50 | 51 | if 'github_user' in params: 52 | ref_node = nodes.reference('', '') 53 | ref_node['refuri'] = self.GITHUB_URL_TEMPLATE.format(**params) 54 | ref_node_text = "{branch} branch".format(**params) 55 | ref_node += nodes.Text(ref_node_text, ref_node_text) 56 | para_nodes += nodes.Text("The final code from this video is in the ", "The final code from this video is in the ") 57 | para_nodes += ref_node 58 | para_nodes += nodes.Text(params['repo']) 59 | 60 | video_node = nodes.raw('', text, format='html') 61 | (video_node.source, 62 | video_node.line) = self.state_machine.get_source_and_line(self.lineno) 63 | return [video_node, para_nodes] 64 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | alabaster==0.7.12 2 | Babel==2.9.1 3 | certifi==2019.11.28 4 | chardet==3.0.4 5 | commonmark==0.9.1 6 | docutils==0.16 7 | idna==2.8 8 | imagesize==1.2.0 9 | Jinja2==2.11.3 10 | MarkupSafe==1.1.1 11 | packaging==20.1 12 | Pygments==2.7.4 13 | pypandoc==1.4 14 | pyparsing==2.4.6 15 | pytz==2019.3 16 | recommonmark==0.6.0 17 | requests==2.22.0 18 | six==1.14.0 19 | snowballstemmer==2.0.0 20 | Sphinx==3.3.1 21 | git+https://github.com/LaunchCodeEducation/sphinx-bootstrap-theme.git@master 22 | sphinxcontrib-websupport==1.1.2 23 | urllib3 24 | -------------------------------------------------------------------------------- /src/_static/css/fonts/Nexa-Regular-Italic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/_static/css/fonts/Nexa-Regular-Italic.otf -------------------------------------------------------------------------------- /src/_static/css/fonts/Nexa-XBold-Italic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/_static/css/fonts/Nexa-XBold-Italic.otf -------------------------------------------------------------------------------- /src/_static/css/fonts/Nexa-XBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/_static/css/fonts/Nexa-XBold.otf -------------------------------------------------------------------------------- /src/_static/css/fonts/NexaRegular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/_static/css/fonts/NexaRegular.otf -------------------------------------------------------------------------------- /src/_static/css/launchcode.css: -------------------------------------------------------------------------------- 1 | /* TODO - remove these font defs once custom.css has been deployed */ 2 | 3 | @font-face { 4 | font-family: 'Nexa'; 5 | font-style: normal; 6 | font-weight: 400; 7 | src: url('fonts/NexaRegular.otf') format('opentype'); 8 | } 9 | 10 | @font-face { 11 | font-family: 'Nexa'; 12 | font-style: italic; 13 | font-weight: 400; 14 | src: url('fonts/Nexa-Regular-Italic.otf') format('opentype'); 15 | } 16 | 17 | @font-face { 18 | font-family: 'Nexa'; 19 | font-style: normal; 20 | font-weight: 700; 21 | src: url('fonts/Nexa-XBold.otf') format('opentype'); 22 | } 23 | 24 | @font-face { 25 | font-family: 'Nexa'; 26 | font-style: italic; 27 | font-weight: 700; 28 | src: url('fonts/Nexa-XBold-Italic.otf') format('opentype'); 29 | } 30 | 31 | /* END TODO */ 32 | 33 | @font-face { 34 | font-family: 'Nexa'; 35 | font-style: normal; 36 | font-weight: 400; 37 | src: url('fonts/NexaRegular.otf') format('opentype'); 38 | } 39 | 40 | @font-face { 41 | font-family: 'Nexa'; 42 | font-style: italic; 43 | font-weight: 400; 44 | src: url('fonts/Nexa-Regular-Italic.otf') format('opentype'); 45 | } 46 | 47 | @font-face { 48 | font-family: 'Nexa'; 49 | font-style: normal; 50 | font-weight: 700; 51 | src: url('fonts/Nexa-XBold.otf') format('opentype'); 52 | } 53 | 54 | @font-face { 55 | font-family: 'Nexa'; 56 | font-style: italic; 57 | font-weight: 700; 58 | src: url('fonts/Nexa-XBold-Italic.otf') format('opentype'); 59 | } 60 | 61 | /* END TODO */ 62 | 63 | body { 64 | font-size: 16px; 65 | line-height: 1.8em; 66 | font-family: "Nexa","Monsterrat","Helvetica Neue",Helvetica,Arial,sans-serif; 67 | } 68 | h1 { 69 | /* TODO: this should be in /repos/bootswatch/launchcode/variables.less after we learn how to alter the theme */ 70 | color: #3c79b8; 71 | } 72 | 73 | 74 | h1, h2, h3, h4, h5 { 75 | margin: 1em 0 .5em; 76 | } 77 | 78 | h1 a, 79 | h2 a, 80 | h3 a, 81 | h4 a, 82 | h5 a { 83 | color: inherit; 84 | } 85 | 86 | h1 strong, 87 | h2 strong, 88 | h3 strong, 89 | h4 strong, 90 | h5 strong { 91 | color: #716b7a; 92 | } 93 | 94 | h1 a:hover, 95 | h2 a:hover, 96 | h3 a:hover, 97 | h4 a:hover, 98 | h5 a:hover { 99 | text-decoration: none; 100 | } 101 | 102 | .toctree-wrapper ul, 103 | .toctree-wrapper ol { 104 | list-style: none; 105 | padding-left: 20px; 106 | } 107 | 108 | .toctree-wrapper > ul > li > a, 109 | .toctree-wrapper > ol > li > a { 110 | font-size: 20px; 111 | } 112 | code { 113 | background: none; 114 | color: #419f6a; 115 | padding: 0; 116 | font-weight: bold; 117 | font-size: inherit; 118 | } 119 | 120 | .pager code { 121 | color: #fff; 122 | font-weight: bold; 123 | } 124 | 125 | .navbar-brand { 126 | padding: 15px 15px; 127 | line-height: 30px; 128 | } 129 | 130 | .navbar-brand img { 131 | margin-top: -10px; 132 | margin-right: 30px; 133 | } 134 | 135 | .searchLabel { 136 | color:white; 137 | font-size: 1.4vw; 138 | font-family: "Nexa"; 139 | font-weight: bold; 140 | margin-right: 0.5em; 141 | } 142 | 143 | /* Trick to prevent section headings from hiding behind the navbar */ 144 | .section { 145 | margin-top: -60px; 146 | padding-top: 60px; 147 | } 148 | 149 | /* Allow scrolling of dropdown */ 150 | .dropdown-menu.globaltoc { 151 | max-height: calc(100vh - 60px); 152 | overflow: scroll; 153 | min-width: 400px; 154 | } 155 | 156 | .nav .dropdown-menu ol { 157 | list-style: none; 158 | padding: 1em; 159 | } 160 | 161 | /* Aside Boxes and Admonitions */ 162 | .fas { 163 | color: #FF4F33; 164 | } 165 | 166 | .fas.fa-external-link-alt { 167 | color: inherit; 168 | font-size: 10px; 169 | padding-left: 4px; 170 | } 171 | 172 | aside { 173 | padding: 2em; 174 | padding-top: 1em; 175 | border-radius: 2px; 176 | margin: 2em; 177 | box-shadow: 0 4px 10px 0 #eee; 178 | } 179 | 180 | aside::before { 181 | position: relative; 182 | left: -2em; 183 | padding: 0.5em; 184 | padding-right: 1em; 185 | font-family: "Nexa"; 186 | font-weight: bold; 187 | color: rgb(54, 74, 95); 188 | border-bottom: 1px solid #eee; 189 | } 190 | 191 | .aside-note::before { 192 | content: "Note"; 193 | } 194 | 195 | .aside-warning::before { 196 | content: "Warning"; 197 | } 198 | 199 | .aside-hint::before { 200 | content: "Hint"; 201 | } 202 | 203 | .aside-pro-tip::before { 204 | content: "Pro Tip"; 205 | } 206 | 207 | .aside-example::before { 208 | content: "Example"; 209 | } 210 | 211 | .aside-question::before { 212 | content: "Question"; 213 | } 214 | 215 | .aside-definition::before { 216 | content: "Definition"; 217 | } 218 | 219 | .aside-custom::before { 220 | content: attr(label); 221 | } 222 | 223 | .content aside p { 224 | margin: 0; 225 | margin-top: 1em; 226 | } 227 | 228 | .content aside p:first-child { 229 | margin-top: 2em; 230 | } 231 | 232 | div.admonition { 233 | padding: 2em; 234 | padding-top: 1em; 235 | border-radius: 2px; 236 | margin: 2em; 237 | border: 1px solid #354a5f; 238 | background-color: #fff; 239 | color: rgb(52, 74, 95); 240 | } 241 | 242 | .admonition-title { 243 | position: relative; 244 | left: -2em; 245 | padding: 0.5em; 246 | padding-right: 1em; 247 | padding-left: 2em; 248 | font-family: "Nexa"; 249 | font-weight: bold; 250 | color: rgb(54, 74, 95); 251 | display: inline-block; 252 | } 253 | 254 | .admonition-question > p, .admonition-question > ul { 255 | margin-bottom: 10px; 256 | } 257 | 258 | .admonition-question ol, 259 | div[id^="exercises-"] ol ol { 260 | list-style-type: lower-alpha; 261 | } 262 | 263 | div[id^="exercises-"] ol ol ol { 264 | list-style-type: lower-roman; 265 | } 266 | 267 | .admonition-title .fas { 268 | margin-right: .5em; 269 | } 270 | 271 | .content .admonition p.last { 272 | margin: 0; 273 | margin-top: 1em; 274 | } 275 | 276 | .content .admonition p.first { 277 | margin-top: 2em; 278 | } 279 | 280 | pre { 281 | display: block; 282 | overflow-x: auto; 283 | padding: 1.5rem; 284 | -webkit-text-size-adjust: none; 285 | color: #ffffff; 286 | border: 1px solid #777; 287 | border-radius: 4px; 288 | background-color: #354a5f; 289 | margin: 0; 290 | } 291 | 292 | div.highlight-js, 293 | div.highlight-none, 294 | div.highlight-css, 295 | div.highlight-html { 296 | margin: 1em 0; 297 | } 298 | 299 | div.highlight-js + p.repl-link, 300 | div.highlight-none + p.repl-link, 301 | div.highlight-css + p.repl-link, 302 | div.highlight-html + p.repl-link { 303 | margin-top: -1em; 304 | } 305 | 306 | .linenos { 307 | background-color: #354a5f; 308 | border-right: 1px solid #fff; 309 | } 310 | 311 | .highlighttable .linenos pre { 312 | font-size: 14px; 313 | padding-right: 10px; 314 | color: #fff; 315 | } 316 | 317 | th.head { 318 | text-align: center; 319 | } 320 | 321 | table.highlight { 322 | width: 100%; 323 | margin: 0; 324 | table-layout: fixed; 325 | } 326 | 327 | table.highlight td { 328 | padding: 0; 329 | } 330 | 331 | table.align-default { 332 | text-align: left; 333 | } 334 | 335 | .highlight .code pre { 336 | border-radius: 0 4px 4px 0; 337 | border-left: none; 338 | } 339 | 340 | blockquote { 341 | padding: 30px 45px; 342 | border: none; 343 | font-style: italic; 344 | } 345 | 346 | blockquote div { 347 | padding-top: 0; 348 | } 349 | 350 | .content img { 351 | max-width: 100%; 352 | box-shadow: 0 0 5px 0 #ddd; 353 | margin: 20px auto; 354 | border-radius: 4px; 355 | padding: 20px; 356 | display: block; 357 | } 358 | 359 | .figure img { 360 | margin-bottom: 10px; 361 | } 362 | 363 | .figure .caption { 364 | font-style: italic; 365 | } 366 | 367 | div.topic { 368 | border: none; 369 | background-color: #efefef; 370 | border-radius: 5px; 371 | padding: 7px; 372 | } 373 | 374 | /* Sidebar Navigation */ 375 | 376 | .bs-sidenav, 377 | div.contents { 378 | background-color: #fff; 379 | font-family: "Nexa",sans-serif; 380 | } 381 | 382 | .toctree-wrapper ol { 383 | list-style: none; 384 | padding-left: 20px; 385 | } 386 | 387 | div.contents a:hover { 388 | text-decoration: none; 389 | } 390 | 391 | .bs-sidenav .nav-header { 392 | font-weight: bold; 393 | font-size: 20px; 394 | } 395 | 396 | .bs-sidenav .nav > li > a:hover, 397 | .bs-sidenav .nav > li > a:focus { 398 | background-color: #fff; 399 | border: none; 400 | color: #354a5f; 401 | } 402 | 403 | .bs-sidenav > .nav-list { 404 | margin: 10px 0; 405 | } 406 | 407 | .bs-sidenav .nav-list li { 408 | font-size: 16px; 409 | margin: 2px 0; 410 | } 411 | 412 | .admonition .highlight, 413 | .admonition .highlighttable { 414 | margin: 10px 0; 415 | } 416 | 417 | .admonition .highlight .highlight { 418 | margin: 0; 419 | } 420 | 421 | .highlight .c { color: #E67F74; font-style: italic; background-color: #354a5f } /* Comment */ 422 | .highlight .ch { color: #E67F74; font-style: italic; background-color: #354a5f } /* Comment.Hashbang */ 423 | .highlight .cm { color: #E67F74; font-style: italic; background-color: #354a5f } /* Comment.Multiline */ 424 | .highlight .cp { color: #E67F74; font-weight: bold; font-style: italic; background-color: #354a5f } /* Comment.Preproc */ 425 | .highlight .cpf { color: #E67F74; font-style: italic; background-color: #354a5f } /* Comment.PreprocFile */ 426 | .highlight .c1 { color: #E67F74; font-style: italic; background-color: #354a5f } /* Comment.Single */ 427 | .highlight .cs { color: #E67F74; font-style: italic; background-color: #354a5f } /* Comment.Special */ 428 | 429 | .highlight .s { color: #61C08D } /* Literal.String */ 430 | .highlight .sa { color: #61C08D } /* Literal.String.Affix */ 431 | .highlight .sb { color: #61C08D } /* Literal.String.Backtick */ 432 | .highlight .sc { color: #61C08D } /* Literal.String.Char */ 433 | .highlight .dl { color: #61C08D } /* Literal.String.Delimiter */ 434 | .highlight .sd { color: #61C08D } /* Literal.String.Doc */ 435 | .highlight .s2 { color: #61C08D } /* Literal.String.Double */ 436 | .highlight .se { color: #61C08D } /* Literal.String.Escape */ 437 | .highlight .sh { color: #61C08D } /* Literal.String.Heredoc */ 438 | .highlight .si { color: #61C08D } /* Literal.String.Interpol */ 439 | .highlight .sx { color: #61C08D } /* Literal.String.Other */ 440 | .highlight .sr { color: #61C08D } /* Literal.String.Regex */ 441 | .highlight .s1 { color: #61C08D } /* Literal.String.Single */ 442 | .highlight .ss { color: #61C08D } /* Literal.String.Symbol */ 443 | 444 | .highlight .mb { color: #DF552D; font-weight: bold } /* Literal.Number.Bin */ 445 | .highlight .mf { color: #DF552D; font-weight: bold } /* Literal.Number.Float */ 446 | .highlight .mh { color: #DF552D; font-weight: bold } /* Literal.Number.Hex */ 447 | .highlight .mi { color: #DF552D; font-weight: bold } /* Literal.Number.Integer */ 448 | .highlight .mo { color: #DF552D; font-weight: bold } /* Literal.Number.Oct */ 449 | .highlight .m { color: #DF552D; font-weight: bold } /* Literal.Number */ 450 | .highlight .il { color: #DF552D; font-weight: bold } /* Literal.Number.Integer.Long */ 451 | 452 | .highlight .s { color: #61C08D } /* Literal.String */ 453 | 454 | .highlight .no { color: #FF98CE } /* Name.Constant */ 455 | .highlight .na { color: #FF98CE; font-weight: bold } /* Name.Attribute */ 456 | .highlight .nf { color: #FF98CE; font-weight: bold } /* Name.Function */ 457 | .highlight .fm { color: #FF98CE; font-weight: bold } /* Name.Function.Magic */ 458 | .highlight .nt { color: #FF98CE; font-weight: bold } /* Name.Tag */ 459 | .highlight .nv { color: #FF98CE } /* Name.Variable */ 460 | .highlight .vc { color: #FF98CE } /* Name.Variable.Class */ 461 | .highlight .vg { color: #FF98CE } /* Name.Variable.Global */ 462 | .highlight .vi { color: #FF98CE } /* Name.Variable.Instance */ 463 | .highlight .vm { color: #FF98CE } /* Name.Variable.Magic */ 464 | 465 | .highlight .k { color: #f1A640; font-weight: bold } /* Keyword */ 466 | .highlight .kt { color: #f1A640; font-weight: bold } /* Keyword.Type */ 467 | .highlight .kc { color: #f1A640; font-weight: bold } /* Keyword.Constant */ 468 | .highlight .kd { color: #f1A640; font-weight: bold } /* Keyword.Declaration */ 469 | .highlight .kn { color: #f1A640; font-weight: bold } /* Keyword.Namespace */ 470 | .highlight .kp { color: #f1A640 } /* Keyword.Pseudo */ 471 | .highlight .kr { color: #f1A640; font-weight: bold } /* Keyword.Reserved */ 472 | 473 | .highlight .go { color: #ffffff; background-color: #354a5f } /* Generic.Output */ 474 | 475 | 476 | /* TODO - Remove these after updating shared ed styles(custom.css?) */ 477 | 478 | h2, h3, h4, h5, h6 { 479 | margin-top: 0.5em !important; 480 | } 481 | 482 | /* END TODO */ 483 | 484 | .footer p { 485 | margin: 0 0 10.5px; 486 | } 487 | 488 | /* Tables */ 489 | 490 | table caption { 491 | color: #716b7a; 492 | font-weight: bold; 493 | font-size: 1.2em; 494 | } 495 | 496 | /* END Tables */ 497 | 498 | p[id]:before { 499 | display: block; 500 | content: " "; 501 | margin-top: -60px; 502 | height: 60px; 503 | visibility: hidden; 504 | } 505 | 506 | .navbar-nav .open .dropdown-menu a { 507 | color: white; 508 | } 509 | 510 | /* Permalinks */ 511 | 512 | a.headerlink { 513 | visibility: hidden; 514 | } 515 | 516 | div.section > h1:hover > a.headerlink { 517 | visibility: visible; 518 | } 519 | 520 | h2:hover > a.headerlink, 521 | h3:hover > a.headerlink, 522 | h4:hover > a.headerlink, 523 | h5:hover > a.headerlink, 524 | h6:hover > a.headerlink, 525 | dt:hover > a.headerlink, 526 | caption:hover > a.headerlink, 527 | p.caption:hover > a.headerlink 528 | 529 | div.code-block-caption:hover > a.headerlink { 530 | visibility: visible; 531 | } -------------------------------------------------------------------------------- /src/_static/css/site.css: -------------------------------------------------------------------------------- 1 | /* BEGIN styles related to inclusion of breadcrumb nav */ 2 | 3 | .breadcrumb { 4 | width: 100%; 5 | position: fixed; 6 | top: 60px; 7 | z-index: 99; 8 | border-bottom: 1px solid #dbdbdb; 9 | } 10 | 11 | body.body-bc { 12 | padding-top: 98px; 13 | } 14 | 15 | .body-bc .section { 16 | margin-top: -98px; 17 | padding-top: 98px; 18 | } 19 | 20 | .body-bc p[id]:before { 21 | display: block; 22 | content: " "; 23 | margin-top: -105px; 24 | height: 105px; 25 | visibility: hidden; 26 | } 27 | 28 | /* END styles related to inclusion of breadcrumb nav */ 29 | 30 | /* BEGIN jumbotron styles */ 31 | 32 | .jumbotron { 33 | text-align: center; 34 | padding: 0; 35 | margin: 0; 36 | } 37 | 38 | .jumbotron h1 { 39 | font-size: 42px; 40 | } 41 | 42 | .jumbotron .content > * { 43 | margin: 40px 0; 44 | } 45 | 46 | .jumbotron .pagination { 47 | margin: 0; 48 | } 49 | 50 | /* END jumbotron styles */ 51 | 52 | .toctree-wrapper ol { 53 | list-style: none; 54 | padding-left: 20px; 55 | } 56 | 57 | .fas.fa-external-link-alt { 58 | color: inherit; 59 | font-size: 10px; 60 | padding-left: 4px; 61 | } -------------------------------------------------------------------------------- /src/_static/fa/css/brands.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Brands'; 7 | font-style: normal; 8 | font-weight: normal; 9 | font-display: auto; 10 | src: url("../webfonts/fa-brands-400.eot"); 11 | src: url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.woff") format("woff"), url("../webfonts/fa-brands-400.ttf") format("truetype"), url("../webfonts/fa-brands-400.svg#fontawesome") format("svg"); } 12 | 13 | .fab { 14 | font-family: 'Font Awesome 5 Brands'; } 15 | -------------------------------------------------------------------------------- /src/_static/fa/css/brands.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"} -------------------------------------------------------------------------------- /src/_static/fa/css/regular.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Free'; 7 | font-style: normal; 8 | font-weight: 400; 9 | font-display: auto; 10 | src: url("../webfonts/fa-regular-400.eot"); 11 | src: url("../webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.woff") format("woff"), url("../webfonts/fa-regular-400.ttf") format("truetype"), url("../webfonts/fa-regular-400.svg#fontawesome") format("svg"); } 12 | 13 | .far { 14 | font-family: 'Font Awesome 5 Free'; 15 | font-weight: 400; } 16 | -------------------------------------------------------------------------------- /src/_static/fa/css/regular.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:"Font Awesome 5 Free";font-weight:400} -------------------------------------------------------------------------------- /src/_static/fa/css/solid.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Free'; 7 | font-style: normal; 8 | font-weight: 900; 9 | font-display: auto; 10 | src: url("../webfonts/fa-solid-900.eot"); 11 | src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.woff") format("woff"), url("../webfonts/fa-solid-900.ttf") format("truetype"), url("../webfonts/fa-solid-900.svg#fontawesome") format("svg"); } 12 | 13 | .fa, 14 | .fas { 15 | font-family: 'Font Awesome 5 Free'; 16 | font-weight: 900; } 17 | -------------------------------------------------------------------------------- /src/_static/fa/css/solid.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:"Font Awesome 5 Free";font-weight:900} -------------------------------------------------------------------------------- /src/_static/fa/css/svg-with-js.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | svg:not(:root).svg-inline--fa { 6 | overflow: visible; } 7 | 8 | .svg-inline--fa { 9 | display: inline-block; 10 | font-size: inherit; 11 | height: 1em; 12 | overflow: visible; 13 | vertical-align: -.125em; } 14 | .svg-inline--fa.fa-lg { 15 | vertical-align: -.225em; } 16 | .svg-inline--fa.fa-w-1 { 17 | width: 0.0625em; } 18 | .svg-inline--fa.fa-w-2 { 19 | width: 0.125em; } 20 | .svg-inline--fa.fa-w-3 { 21 | width: 0.1875em; } 22 | .svg-inline--fa.fa-w-4 { 23 | width: 0.25em; } 24 | .svg-inline--fa.fa-w-5 { 25 | width: 0.3125em; } 26 | .svg-inline--fa.fa-w-6 { 27 | width: 0.375em; } 28 | .svg-inline--fa.fa-w-7 { 29 | width: 0.4375em; } 30 | .svg-inline--fa.fa-w-8 { 31 | width: 0.5em; } 32 | .svg-inline--fa.fa-w-9 { 33 | width: 0.5625em; } 34 | .svg-inline--fa.fa-w-10 { 35 | width: 0.625em; } 36 | .svg-inline--fa.fa-w-11 { 37 | width: 0.6875em; } 38 | .svg-inline--fa.fa-w-12 { 39 | width: 0.75em; } 40 | .svg-inline--fa.fa-w-13 { 41 | width: 0.8125em; } 42 | .svg-inline--fa.fa-w-14 { 43 | width: 0.875em; } 44 | .svg-inline--fa.fa-w-15 { 45 | width: 0.9375em; } 46 | .svg-inline--fa.fa-w-16 { 47 | width: 1em; } 48 | .svg-inline--fa.fa-w-17 { 49 | width: 1.0625em; } 50 | .svg-inline--fa.fa-w-18 { 51 | width: 1.125em; } 52 | .svg-inline--fa.fa-w-19 { 53 | width: 1.1875em; } 54 | .svg-inline--fa.fa-w-20 { 55 | width: 1.25em; } 56 | .svg-inline--fa.fa-pull-left { 57 | margin-right: .3em; 58 | width: auto; } 59 | .svg-inline--fa.fa-pull-right { 60 | margin-left: .3em; 61 | width: auto; } 62 | .svg-inline--fa.fa-border { 63 | height: 1.5em; } 64 | .svg-inline--fa.fa-li { 65 | width: 2em; } 66 | .svg-inline--fa.fa-fw { 67 | width: 1.25em; } 68 | 69 | .fa-layers svg.svg-inline--fa { 70 | bottom: 0; 71 | left: 0; 72 | margin: auto; 73 | position: absolute; 74 | right: 0; 75 | top: 0; } 76 | 77 | .fa-layers { 78 | display: inline-block; 79 | height: 1em; 80 | position: relative; 81 | text-align: center; 82 | vertical-align: -.125em; 83 | width: 1em; } 84 | .fa-layers svg.svg-inline--fa { 85 | -webkit-transform-origin: center center; 86 | transform-origin: center center; } 87 | 88 | .fa-layers-text, .fa-layers-counter { 89 | display: inline-block; 90 | position: absolute; 91 | text-align: center; } 92 | 93 | .fa-layers-text { 94 | left: 50%; 95 | top: 50%; 96 | -webkit-transform: translate(-50%, -50%); 97 | transform: translate(-50%, -50%); 98 | -webkit-transform-origin: center center; 99 | transform-origin: center center; } 100 | 101 | .fa-layers-counter { 102 | background-color: #ff253a; 103 | border-radius: 1em; 104 | -webkit-box-sizing: border-box; 105 | box-sizing: border-box; 106 | color: #fff; 107 | height: 1.5em; 108 | line-height: 1; 109 | max-width: 5em; 110 | min-width: 1.5em; 111 | overflow: hidden; 112 | padding: .25em; 113 | right: 0; 114 | text-overflow: ellipsis; 115 | top: 0; 116 | -webkit-transform: scale(0.25); 117 | transform: scale(0.25); 118 | -webkit-transform-origin: top right; 119 | transform-origin: top right; } 120 | 121 | .fa-layers-bottom-right { 122 | bottom: 0; 123 | right: 0; 124 | top: auto; 125 | -webkit-transform: scale(0.25); 126 | transform: scale(0.25); 127 | -webkit-transform-origin: bottom right; 128 | transform-origin: bottom right; } 129 | 130 | .fa-layers-bottom-left { 131 | bottom: 0; 132 | left: 0; 133 | right: auto; 134 | top: auto; 135 | -webkit-transform: scale(0.25); 136 | transform: scale(0.25); 137 | -webkit-transform-origin: bottom left; 138 | transform-origin: bottom left; } 139 | 140 | .fa-layers-top-right { 141 | right: 0; 142 | top: 0; 143 | -webkit-transform: scale(0.25); 144 | transform: scale(0.25); 145 | -webkit-transform-origin: top right; 146 | transform-origin: top right; } 147 | 148 | .fa-layers-top-left { 149 | left: 0; 150 | right: auto; 151 | top: 0; 152 | -webkit-transform: scale(0.25); 153 | transform: scale(0.25); 154 | -webkit-transform-origin: top left; 155 | transform-origin: top left; } 156 | 157 | .fa-lg { 158 | font-size: 1.33333em; 159 | line-height: 0.75em; 160 | vertical-align: -.0667em; } 161 | 162 | .fa-xs { 163 | font-size: .75em; } 164 | 165 | .fa-sm { 166 | font-size: .875em; } 167 | 168 | .fa-1x { 169 | font-size: 1em; } 170 | 171 | .fa-2x { 172 | font-size: 2em; } 173 | 174 | .fa-3x { 175 | font-size: 3em; } 176 | 177 | .fa-4x { 178 | font-size: 4em; } 179 | 180 | .fa-5x { 181 | font-size: 5em; } 182 | 183 | .fa-6x { 184 | font-size: 6em; } 185 | 186 | .fa-7x { 187 | font-size: 7em; } 188 | 189 | .fa-8x { 190 | font-size: 8em; } 191 | 192 | .fa-9x { 193 | font-size: 9em; } 194 | 195 | .fa-10x { 196 | font-size: 10em; } 197 | 198 | .fa-fw { 199 | text-align: center; 200 | width: 1.25em; } 201 | 202 | .fa-ul { 203 | list-style-type: none; 204 | margin-left: 2.5em; 205 | padding-left: 0; } 206 | .fa-ul > li { 207 | position: relative; } 208 | 209 | .fa-li { 210 | left: -2em; 211 | position: absolute; 212 | text-align: center; 213 | width: 2em; 214 | line-height: inherit; } 215 | 216 | .fa-border { 217 | border: solid 0.08em #eee; 218 | border-radius: .1em; 219 | padding: .2em .25em .15em; } 220 | 221 | .fa-pull-left { 222 | float: left; } 223 | 224 | .fa-pull-right { 225 | float: right; } 226 | 227 | .fa.fa-pull-left, 228 | .fas.fa-pull-left, 229 | .far.fa-pull-left, 230 | .fal.fa-pull-left, 231 | .fab.fa-pull-left { 232 | margin-right: .3em; } 233 | 234 | .fa.fa-pull-right, 235 | .fas.fa-pull-right, 236 | .far.fa-pull-right, 237 | .fal.fa-pull-right, 238 | .fab.fa-pull-right { 239 | margin-left: .3em; } 240 | 241 | .fa-spin { 242 | -webkit-animation: fa-spin 2s infinite linear; 243 | animation: fa-spin 2s infinite linear; } 244 | 245 | .fa-pulse { 246 | -webkit-animation: fa-spin 1s infinite steps(8); 247 | animation: fa-spin 1s infinite steps(8); } 248 | 249 | @-webkit-keyframes fa-spin { 250 | 0% { 251 | -webkit-transform: rotate(0deg); 252 | transform: rotate(0deg); } 253 | 100% { 254 | -webkit-transform: rotate(360deg); 255 | transform: rotate(360deg); } } 256 | 257 | @keyframes fa-spin { 258 | 0% { 259 | -webkit-transform: rotate(0deg); 260 | transform: rotate(0deg); } 261 | 100% { 262 | -webkit-transform: rotate(360deg); 263 | transform: rotate(360deg); } } 264 | 265 | .fa-rotate-90 { 266 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; 267 | -webkit-transform: rotate(90deg); 268 | transform: rotate(90deg); } 269 | 270 | .fa-rotate-180 { 271 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; 272 | -webkit-transform: rotate(180deg); 273 | transform: rotate(180deg); } 274 | 275 | .fa-rotate-270 { 276 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; 277 | -webkit-transform: rotate(270deg); 278 | transform: rotate(270deg); } 279 | 280 | .fa-flip-horizontal { 281 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; 282 | -webkit-transform: scale(-1, 1); 283 | transform: scale(-1, 1); } 284 | 285 | .fa-flip-vertical { 286 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; 287 | -webkit-transform: scale(1, -1); 288 | transform: scale(1, -1); } 289 | 290 | .fa-flip-both, .fa-flip-horizontal.fa-flip-vertical { 291 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; 292 | -webkit-transform: scale(-1, -1); 293 | transform: scale(-1, -1); } 294 | 295 | :root .fa-rotate-90, 296 | :root .fa-rotate-180, 297 | :root .fa-rotate-270, 298 | :root .fa-flip-horizontal, 299 | :root .fa-flip-vertical, 300 | :root .fa-flip-both { 301 | -webkit-filter: none; 302 | filter: none; } 303 | 304 | .fa-stack { 305 | display: inline-block; 306 | height: 2em; 307 | position: relative; 308 | width: 2.5em; } 309 | 310 | .fa-stack-1x, 311 | .fa-stack-2x { 312 | bottom: 0; 313 | left: 0; 314 | margin: auto; 315 | position: absolute; 316 | right: 0; 317 | top: 0; } 318 | 319 | .svg-inline--fa.fa-stack-1x { 320 | height: 1em; 321 | width: 1.25em; } 322 | 323 | .svg-inline--fa.fa-stack-2x { 324 | height: 2em; 325 | width: 2.5em; } 326 | 327 | .fa-inverse { 328 | color: #fff; } 329 | 330 | .sr-only { 331 | border: 0; 332 | clip: rect(0, 0, 0, 0); 333 | height: 1px; 334 | margin: -1px; 335 | overflow: hidden; 336 | padding: 0; 337 | position: absolute; 338 | width: 1px; } 339 | 340 | .sr-only-focusable:active, .sr-only-focusable:focus { 341 | clip: auto; 342 | height: auto; 343 | margin: 0; 344 | overflow: visible; 345 | position: static; 346 | width: auto; } 347 | -------------------------------------------------------------------------------- /src/_static/fa/css/svg-with-js.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | .svg-inline--fa,svg:not(:root).svg-inline--fa{overflow:visible}.svg-inline--fa{display:inline-block;font-size:inherit;height:1em;vertical-align:-.125em}.svg-inline--fa.fa-lg{vertical-align:-.225em}.svg-inline--fa.fa-w-1{width:.0625em}.svg-inline--fa.fa-w-2{width:.125em}.svg-inline--fa.fa-w-3{width:.1875em}.svg-inline--fa.fa-w-4{width:.25em}.svg-inline--fa.fa-w-5{width:.3125em}.svg-inline--fa.fa-w-6{width:.375em}.svg-inline--fa.fa-w-7{width:.4375em}.svg-inline--fa.fa-w-8{width:.5em}.svg-inline--fa.fa-w-9{width:.5625em}.svg-inline--fa.fa-w-10{width:.625em}.svg-inline--fa.fa-w-11{width:.6875em}.svg-inline--fa.fa-w-12{width:.75em}.svg-inline--fa.fa-w-13{width:.8125em}.svg-inline--fa.fa-w-14{width:.875em}.svg-inline--fa.fa-w-15{width:.9375em}.svg-inline--fa.fa-w-16{width:1em}.svg-inline--fa.fa-w-17{width:1.0625em}.svg-inline--fa.fa-w-18{width:1.125em}.svg-inline--fa.fa-w-19{width:1.1875em}.svg-inline--fa.fa-w-20{width:1.25em}.svg-inline--fa.fa-pull-left{margin-right:.3em;width:auto}.svg-inline--fa.fa-pull-right{margin-left:.3em;width:auto}.svg-inline--fa.fa-border{height:1.5em}.svg-inline--fa.fa-li{width:2em}.svg-inline--fa.fa-fw{width:1.25em}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{transform-origin:center center}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers-text{left:50%;top:50%;transform:translate(-50%,-50%);transform-origin:center center}.fa-layers-counter{background-color:#ff253a;border-radius:1em;box-sizing:border-box;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;right:0;text-overflow:ellipsis;top:0;transform:scale(.25);transform-origin:top right}.fa-layers-bottom-right{bottom:0;right:0;top:auto;transform:scale(.25);transform-origin:bottom right}.fa-layers-bottom-left{bottom:0;left:0;right:auto;top:auto;transform:scale(.25);transform-origin:bottom left}.fa-layers-top-right{right:0;top:0;transform:scale(.25);transform-origin:top right}.fa-layers-top-left{left:0;right:auto;top:0;transform:scale(.25);transform-origin:top left}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:#fff}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto} -------------------------------------------------------------------------------- /src/_static/fa/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/_static/fa/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /src/_static/fa/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/_static/fa/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /src/_static/fa/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/_static/fa/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /src/_static/fa/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/_static/fa/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /src/_static/fa/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/_static/fa/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /src/_static/fa/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/_static/fa/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /src/_static/fa/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/_static/fa/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /src/_static/fa/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/_static/fa/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /src/_static/fa/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/_static/fa/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /src/_static/fa/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/_static/fa/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /src/_static/fa/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/_static/fa/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /src/_static/fa/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/_static/fa/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /src/_static/images/logos/codergirl-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/_static/images/logos/codergirl-white.png -------------------------------------------------------------------------------- /src/_static/images/logos/lc-ed-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/_static/images/logos/lc-ed-logo.png -------------------------------------------------------------------------------- /src/_static/images/logos/lc-logo.svg: -------------------------------------------------------------------------------- 1 | LaunchCode_white -------------------------------------------------------------------------------- /src/_templates/layout.html: -------------------------------------------------------------------------------- 1 | {% extends "basic/layout.html" %} 2 | 3 | {% if theme_bootstrap_version == "3" %} 4 | {% set bootstrap_version, navbar_version = "3.3.7", "" %} 5 | {% set bs_span_prefix = "col-md-" %} 6 | {% else %} 7 | {% set bootstrap_version, navbar_version = "2.3.2", "-2" %} 8 | {% set bs_span_prefix = "span" %} 9 | {% endif %} 10 | 11 | {% if pagename == "index" or pagename == "index-full" %} 12 | {% set is_toc = true %} 13 | {% set body_class = "" %} 14 | {% else %} 15 | {% set is_toc = false %} 16 | {% set body_class = "body-bc" %} 17 | {% endif %} 18 | 19 | {% set script_files = script_files + [ 20 | '_static/js/jquery-1.11.0.min.js', 21 | '_static/js/jquery-fix.js', 22 | '_static/bootstrap-' + bootstrap_version + '/js/bootstrap.min.js', 23 | '_static/bootstrap-sphinx.js' 24 | ] 25 | %} 26 | 27 | {%- set render_sidebar = (not embedded) and (not theme_nosidebar|tobool) and sidebars %} 28 | 29 | {%- set bs_content_width = "10" %} 30 | 31 | {%- block doctype -%} 32 | 33 | {%- endblock %} 34 | 35 | {# Sidebar: Rework into our Bootstrap nav section. #} 36 | {% macro navBar() %} 37 | {% include "navbar" + navbar_version + ".html" %} 38 | {% endmacro %} 39 | 40 | {% if theme_bootstrap_version == "3" %} 41 | {%- macro bsidebar() %} 42 | {%- if render_sidebar %} 43 |
    44 | 49 |
    50 | {%- endif %} 51 | {%- endmacro %} 52 | {% else %} 53 | {%- macro bsidebar() %} 54 | {%- if render_sidebar %} 55 |
    56 | 61 |
    62 | {%- endif %} 63 | {%- endmacro %} 64 | {% endif %} 65 | 66 | {%- block extrahead %} 67 | 68 | 69 | 70 | 71 | {% endblock %} 72 | 73 | {# Silence the sidebar's, relbar's #} 74 | {% block header %}{% endblock %} 75 | {% block relbar1 %}{% endblock %} 76 | {% block relbar2 %}{% endblock %} 77 | {% block sidebarsourcelink %}{% endblock %} 78 | 79 | {%- block body_tag %}{% endblock %} 80 | 81 | {%- block content %} 82 | {{ navBar() }} 83 | 84 | {%- if not is_toc %} 85 | 92 | {% endif %} 93 | 94 | {% if is_toc %} 95 |
    96 |
    97 |
    98 |
    99 |

    {{ project }}

    100 | 106 |
    107 |
    108 |
    109 |
    110 | {% endif %} 111 |
    112 |
    113 | {%- block sidebar1 %}{{ bsidebar() }}{% endblock %} 114 |
    115 | 116 | {% block body %}{% endblock %} 117 | 118 | {% if pagename != "index" and pagename != "index-full" %} 119 | 129 | {% endif %} 130 |
    131 | {% block sidebar2 %} {# possible location for sidebar #} {% endblock %} 132 |
    133 |
    134 | {%- endblock %} 135 | 136 | {%- block footer %} 137 | 163 | {%- endblock %} -------------------------------------------------------------------------------- /src/_templates/navbar.html: -------------------------------------------------------------------------------- 1 | 47 | -------------------------------------------------------------------------------- /src/classes/1.rst: -------------------------------------------------------------------------------- 1 | Class 1: Class Overview, Project Planning 2 | ========================================= 3 | 4 | Objectives 5 | ---------- 6 | 7 | Project Module 8 | ^^^^^^^^^^^^^^ 9 | 10 | - Understand the goal of creating a capstone project 11 | - Explain the key components of a meaningful project 12 | - Generate an idea for a project that meets the provided criteria 13 | - Describe story mapping, epics, and user stories. 14 | - Create user stories that clearly identify the targeted user and 15 | describe a single use-case or action 16 | 17 | Prep Work 18 | --------- 19 | 20 | To hit the ground running in class one we need to cover a lot of ground! 21 | We need to: 22 | 23 | * Set up a GitHub repository so we can upload our assignments 24 | * Understand what makes a *good* capstone project 25 | * Learn about **user stories**. 26 | 27 | We want to handle as much setup and logistical work as possible now so the 28 | remaining weeks of the class we can focus on making progress on our 29 | projects! 30 | 31 | Tasks 32 | ^^^^^ 33 | 34 | Before class, complete these modules: 35 | 36 | * :ref:`liftoff-overview` 37 | * :ref:`setup` 38 | * :ref:`user-stories` 39 | 40 | We will spend time in class talking about project ideas in small groups. 41 | **Come to class with 1-2 ideas for projects you might want to work on.** 42 | 43 | .. tip:: 44 | 45 | If you are struggling to come up with ideas check out our :ref:`demo-projects`, as well as `project demo videos made by previous students `__ 46 | 47 | In Class 48 | -------- 49 | 50 | Lecture: How do you ideate, and build a project? 51 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 52 | 53 | In class today, we will have a lecture and discussion on how to ideate 54 | and build a project. Most people struggle to build projects, especially 55 | their first project. In this class, we are going to learn some concepts 56 | that aren't necessarily programming skills, but should help manage the 57 | building of your project. 58 | 59 | Before lecture today, please take a few minutes to think about how you 60 | would build a project. What steps would need to take to build a 61 | project? 62 | 63 | Activity: Get to know your group! 64 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 65 | 66 | Each class will have you check in with your group. Since we don't have 67 | much work to talk about yet, let's take some time to get to know each 68 | other. 69 | 70 | Circle up and go around the group starting with the group's mentor. 71 | Introduce yourself, state what you want to get out of this class, and 72 | finally state at least one idea you have for a project for this class. 73 | 74 | Lecture: Story mapping, user stories, and epics 75 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 76 | 77 | In a brief lecture, let's talk about some of the key ways companies plan 78 | and organize their work while working on technical products. Then, let's 79 | see an example of how to use these tools! 80 | 81 | Example: Attendance App User Stories 82 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 83 | 84 | Watch the instructor take the example idea and write some user stories. 85 | 86 | Activity: Solidify Project Idea & Write user stories 87 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 88 | 89 | If you didn't come to an agreement with your mentor about which project 90 | you will be working on, now is the time to do so! If you need a few 91 | extra minutes to decide on a project, let your mentor know and you can 92 | talk it out together. Remember that this is just the first project of 93 | many projects to come! If you've got a killer idea that might be 94 | slightly out of the scope of this class you can always put it on hold 95 | until after this class ends. 96 | 97 | After choosing a project and having it confirmed by your mentor, write 98 | some user stories for your idea. Consider what you need to do as the 99 | developer. What does the end user need? What other users might there be for 100 | this application? 101 | 102 | You must have your mentor approve at least one of your user stories to 103 | count towards your attendance today! 104 | 105 | Regroup: Instructor Overview, and Questions 106 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 107 | 108 | The instructor should have a few additional user stories for the example 109 | Attendance application idea and will show you what they have to do to 110 | complete the user story! 111 | 112 | 113 | Assignment 114 | ---------- 115 | 116 | Before class 2, complete and turn in :ref:`assignment-project-outline`. 117 | -------------------------------------------------------------------------------- /src/classes/2.rst: -------------------------------------------------------------------------------- 1 | Class 2: Project Planning and Design 2 | ==================================== 3 | 4 | Objectives 5 | ---------- 6 | 7 | Project Module 8 | ^^^^^^^^^^^^^^ 9 | 10 | - Understand the general flow from idea to code. 11 | - Understand wireframes, how they are tied to user stories, and how you 12 | can use them to plan your project. 13 | - Ability to create wireframes and to couple them with user stories. 14 | - Understand user story refining, prioritization, and estimation. 15 | - Utilize project management tools to document and plan project work. 16 | - Describe the basic components of a sprint: planning, kickoff, 17 | retrospective. 18 | - Estimate user stories as a means of predicting the work that can be 19 | carried out in a sprint. 20 | - Utilize wireframes to plan the structure of views and user 21 | interactions. 22 | 23 | Prep Work 24 | --------- 25 | 26 | Before coming to class, coplete the following: 27 | 28 | - :ref:`wireframes` 29 | - Review week 2 of the demo projects: :ref:`Event List Week 2 ` | :ref:`Expense Tracker Week 2 ` 30 | 31 | In Class 32 | -------- 33 | 34 | Lecture: How do you visualize a user story? 35 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 36 | 37 | In class, we will have a lecture and discussion on how to visualize 38 | a user story. The intended user for your application will more than likely be 39 | expecting something on their screen to interact with. How can we 40 | plan/design what their screens will look like? 41 | 42 | Before lecture today, please take a few minutes to think about what your 43 | project looks like to an end user. What do they need to see to use your 44 | application? 45 | 46 | Activity: Design your wireframes! 47 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 48 | 49 | Take this time to draw wireframes for your project check-in with your 50 | mentor. Talk about your wireframes with other people in your group. You 51 | might find that some of your wireframes look similar! 52 | 53 | Lecture: How do you turn user stories and wireframes into code? 54 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 55 | 56 | The instructor will give a brief presentation on a minimum viable product 57 | (MVP) and will give a live demonstration of completing a user story and 58 | wireframe. 59 | 60 | Activity: Plan your MVP and check in with your mentor! 61 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 62 | 63 | Use this time in class to polish your user stories and wireframes so 64 | you have an MVP. Share your plans with your mentor. You should be able 65 | to walk them through how a user interacts with your application by 66 | talking through the user stories and showing the wireframes. 67 | 68 | Regroup: Instructor Demo and Questions 69 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 70 | 71 | The instructor has an MVP for the example Attendance application. Let's 72 | watch them develop a user story and wireframe and then create 73 | the code to see the final results. 74 | 75 | Assignment 76 | ---------- 77 | 78 | Before class 3, complete the :ref:`Project Planning assignment `. 79 | -------------------------------------------------------------------------------- /src/classes/3.rst: -------------------------------------------------------------------------------- 1 | Class 3: Project Setup, Online Profiles 2 | ======================================= 3 | 4 | Objectives 5 | ---------- 6 | 7 | Project Module 8 | ^^^^^^^^^^^^^^ 9 | 10 | - Understand intellectual property & software licensing 11 | - Know how to include a license 12 | 13 | Career Module 14 | ^^^^^^^^^^^^^ 15 | 16 | - Know what makes a good technical resume 17 | - Utilize LinkedIn to network with other professionals 18 | - Know how to use your GitHub account to showcase projects 19 | 20 | Prep Work 21 | --------- 22 | 23 | Before coming to class, cover all of the material in the following modules: 24 | 25 | - :ref:`git-for-projects` 26 | - :ref:`licensing` 27 | - :ref:`online-profiles` 28 | - Review week 3 of the demo projects: :ref:`Event List Week 3 ` | :ref:`Expense Tracker Week 3 ` 29 | 30 | In Class 31 | -------- 32 | 33 | Lecture: Software Licensing 34 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 35 | 36 | We'll discuss what your rights are when it comes to software licensing, 37 | how to choose a license, and how to get started contributing to open 38 | source projects. 39 | 40 | Lecture: Resumes 41 | ^^^^^^^^^^^^^^^^ 42 | 43 | In lecture, we'll cover a few more points about what makes a good resume 44 | and share some examples. 45 | 46 | Lecture: Online Profiles 47 | ^^^^^^^^^^^^^^^^^^^^^^^^ 48 | 49 | We will talk about popular online profiles, like LinkedIn and GitHub. 50 | We'll also discuss why online profiles are necessary and how they 51 | should be presented. We will have examples and take questions. 52 | 53 | Activity: Resume Workshop 54 | ^^^^^^^^^^^^^^^^^^^^^^^^^ 55 | 56 | You will have time to work on your resume, GitHub profile, and LinkedIn. 57 | If you haven't started a technical resume yet, you'll be able to start 58 | based on some examples shared in the prep work. If you have an existing 59 | resume, you can pair up with a partner or your mentor to get feedback. 60 | 61 | 62 | Assignment 63 | ---------- 64 | 65 | Before coming to class next week, complete both of these tasks: 66 | 67 | - :ref:`assignment-project-setup` 68 | - :ref:`assignment-online-profiles` 69 | -------------------------------------------------------------------------------- /src/classes/4.rst: -------------------------------------------------------------------------------- 1 | Class 4: Project Review, Live Coding 2 | ==================================== 3 | 4 | Objectives 5 | ---------- 6 | 7 | Career Module 8 | ^^^^^^^^^^^^^ 9 | 10 | - Know what an interviewer is looking for from a live coding session 11 | - Explain and demonstrate the steps necessary for a successful live 12 | coding session 13 | - Know where to find prompts for live coding practice 14 | - Know how to give and receive good code review feedback 15 | 16 | Prep Work 17 | --------- 18 | 19 | Class 4 is an important class. We will start shifting our in-class focus 20 | from your project to career readiness. You will still be expected to 21 | work on your project outside of class. 22 | 23 | You will have a project review with your mentor. They will be checking 24 | in on the progress of your project. Your mentor knows it's a work in 25 | progress and doesn't expect everything to be perfect, or even 26 | completed. Your mentor wants to see what you have completed so far. 27 | 28 | Tasks 29 | ^^^^^ 30 | 31 | - Prepare for the project review. More on this :ref:`below ` 32 | - Complete the module :ref:`live-coding` 33 | - Review week 4 of the demo projects: :ref:`Event List Week 4 ` | :ref:`Expense Tracker Week 4 ` 34 | 35 | .. note:: 36 | 37 | You'll notice, the timeline of Chris and Paul's projects is a bit different than 38 | your own from now on. 39 | 40 | 41 | .. _project-review-prep: 42 | 43 | Project Review Prep 44 | ^^^^^^^^^^^^^^^^^^^ 45 | 46 | The project review is very important. You need to make constant progress 47 | on your project to show employers you are ready for a job. We want to 48 | ensure you are making progress, and will do so with a review of your project. 49 | 50 | In your Class 4 project review, *your application should have the 51 | following in order to remain enrolled in the class*: 1. A working 52 | landing page 2. At least one complete user story. 53 | 54 | You are more than welcome to show off multiple completed user stories 55 | and multiple pages, but you must have at least a working landing page 56 | and one completed user story to pass this assignment and 57 | stay enrolled in the class. 58 | 59 | *The best way to prepare for this meeting is to spend a lot of time 60 | working on your project*. As such, you will have no extra prep work outside of 61 | the Live Coding prep work listed below. 62 | 63 | In Class 64 | -------- 65 | 66 | Your focus for the project module this week, and going forward, should 67 | be on making as much progress on your project as possible each week. If 68 | you reach a point where you have finished all of your pending user 69 | stories, you should write more. 70 | 71 | Lecture: How do I show my technical skills in a live coding setting? 72 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 73 | 74 | Live coding has been used in technical interviews for years. We will 75 | have a brief lecture and an example of what a live coding instance is 76 | like. 77 | 78 | Lecture: How do I give and receive code review feedback? 79 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 80 | 81 | In class today, we will discuss how to best address and give code review 82 | feedback when working with others. 83 | 84 | Activity: Standup 85 | ^^^^^^^^^^^^^^^^^ 86 | 87 | Before having your one-on-one project review, you should conduct your 88 | standup. Each person should go around and state what tasks they got done 89 | this week and what they are working on next week. 90 | 91 | Activity: Live Coding 92 | ^^^^^^^^^^^^^^^^^^^^^ 93 | 94 | Pair up with another student. Take turns playing the interviewer and 95 | interviewee. This is your chance to practice before the assignment next 96 | week. If you have questions, feel free to talk the problem over with your 97 | partner, or pull in one of your mentors. 98 | 99 | Activity: Project Review 100 | ^^^^^^^^^^^^^^^^^^^^^^^^ 101 | 102 | You will sit down with your mentor one-on-one and demo what progress you 103 | have made so far. You might not feel like you've made much progress, but 104 | you still need to show your mentor what you've done, and what you plan on 105 | doing next. 106 | 107 | To pass this assignment, you must have: 108 | 109 | #. A working landing page 110 | #. At least one functioning and completed user story 111 | 112 | 113 | Assignment 114 | ---------- 115 | 116 | :ref:`Project Review ` 117 | -------------------------------------------------------------------------------- /src/classes/5.rst: -------------------------------------------------------------------------------- 1 | Class 5: Live Coding, Project Work 2 | ================================== 3 | 4 | Objectives 5 | ---------- 6 | 7 | Career Module 8 | ^^^^^^^^^^^^^ 9 | 10 | - Know where to find additional live coding practice problems 11 | - Know how to work through the steps of a live coding session 12 | - Be able to work with other beginners to continue building live coding 13 | experiences 14 | 15 | 16 | Prep Work 17 | --------- 18 | 19 | In class during week 5, we will be having our live coding assignment. In preparation, 20 | this week you should continue practicing live coding problems. You can find practice 21 | problems on many websites: 22 | 23 | - `hackerrank.com `_ 24 | - `codewars.com `_ 25 | - `exercism.io `_ 26 | - `leetcode.com `_ 27 | 28 | As with last week, your focus this week should also be on making progress on 29 | your project. It's critical at this juncture for you to gain some 30 | momentum and to leverage your mentor to get unstuck when things become 31 | difficult. 32 | 33 | The articles below provide some good perspective and tips on being a 34 | budding developer, getting help, and working with a mentor. *Your main 35 | focus should be on working as much as possible on your project!* 36 | 37 | Tasks 38 | ^^^^^ 39 | 40 | - Review the :ref:`live-coding` module again, in preparation for your live coding assignment in class this week. 41 | - Read `How To Be A Good Mentee `_ 42 | - Read `How I Learned to Code in my 30s `_ 43 | - Review week 5 of the demo projects: :ref:`Event List Week 5 ` | :ref:`Expense Tracker Week 5 ` 44 | 45 | In Class 46 | -------- 47 | 48 | Your focus for the project module this week, and going forward, should 49 | be on making as much progress on your project as possible. If 50 | you reach a point where you have finished all of your pending user 51 | stories, you should write more. 52 | 53 | Activity: Standup 54 | ^^^^^^^^^^^^^^^^^ 55 | 56 | Before jumping into the Live Coding assignment we have scheduled for 57 | class today, have your standup meeting. Everyone should each state what 58 | you completed last week and what you are working on this coming week. 59 | 60 | Remember that to be marked present on attendance, you must be able to 61 | show *at least one user story you completed* this previous week 62 | 63 | Regroup: Live Coding Setup 64 | ^^^^^^^^^^^^^^^^^^^^^^^^^^ 65 | 66 | For our live coding assignment, you have been randomly assigned to a 67 | different mentor, instructor, or volunteer who will administer your live 68 | coding assignment. 69 | 70 | The instructor will introduce the activity, tell you where everyone is 71 | working, and share the list of live coding evaluators and students. 72 | 73 | Activity: Live Coding Assignment 74 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 75 | 76 | After the instructor introduction, the evaluators will begin calling 77 | names of people they are working with. Keep an ear out for your name to 78 | keep things moving along smoothly. 79 | 80 | This assignment will take the majority of class time, however you will 81 | only spend 10-15 minutes performing your individual live coding 82 | assignment. Use the rest of your class time to work on your project, or 83 | other assignments. 84 | 85 | You will have a chance to make up this assignment if you don't pass 86 | today. We want to make sure you are comfortable with this process so you 87 | can retake this assignment as many times as you need. Remember, practice 88 | makes perfect! 89 | 90 | Assignment 91 | ---------- 92 | 93 | In class, you will take part in :ref:`assignment-live-coding`. 94 | -------------------------------------------------------------------------------- /src/classes/6.rst: -------------------------------------------------------------------------------- 1 | Class 6: Interviewing 2 | ===================== 3 | 4 | Objectives 5 | ---------- 6 | 7 | Career Module 8 | ^^^^^^^^^^^^^ 9 | 10 | - Understand the parts of an interview: behavioral and technical 11 | - Understand what major categories interviewers are looking for with 12 | behavioral questions 13 | - Answer behavioral questions using the claim evidence model 14 | - Identify good and bad interview answers 15 | 16 | 17 | Prep Work 18 | --------- 19 | 20 | As always continue to work on your project, completing one or more user stories before the next class. 21 | 22 | Tasks 23 | ^^^^^ 24 | 25 | - Complete the :ref:`interviewing` module. 26 | - Review week 6 of the demo projects: :ref:`Event List Week 6 ` | :ref:`Expense Tracker Week 6 `. 27 | 28 | In Class 29 | -------- 30 | 31 | Activity: Standup 32 | ^^^^^^^^^^^^^^^^^ 33 | 34 | Before the instructor begins their lesson, take time to have your standup 35 | meeting. Go around the group and talk about the user stories you completed this 36 | previous week, and the user stories you will work on this coming week. 37 | 38 | Lecture: Technical Interviews 39 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 40 | 41 | In class today we will see a presentation by the instructor. They will 42 | be sharing their experiences with interviewing for technical roles. We 43 | will also go over how to answer questions effectively, and how to 44 | prepare for an interview. 45 | 46 | Activity: Technical Interview Practice 47 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 48 | 49 | For our activity today, you will be paired with another student. You will 50 | take turns asking each other example interview questions and giving 51 | each other constructive feedback. 52 | 53 | Project Work Time 54 | ^^^^^^^^^^^^^^^^^ 55 | 56 | There will probably be some time at the end of class today for you to 57 | work on your project. If you are stuck on something, or need help from a 58 | mentor, don't hesitate to use this time to get unstuck on your project. 59 | 60 | 61 | Assignment 62 | ---------- 63 | 64 | There is no assignment this week. Continue working on your project, and be prepared for the Mock Interview assignment next week. 65 | -------------------------------------------------------------------------------- /src/classes/7.rst: -------------------------------------------------------------------------------- 1 | Class 7: Mock Interview, Project Presentation 2 | ============================================= 3 | 4 | Objectives 5 | ---------- 6 | 7 | Project Module 8 | ^^^^^^^^^^^^^^ 9 | 10 | - Understand how to talk about your project in a presentation 11 | 12 | Career Module 13 | ^^^^^^^^^^^^^ 14 | 15 | - Understand the parts of an interview: behavioral and technical 16 | - Understand what you may encounter in a technical interview 17 | - Can prepare for and practice answering technical questions 18 | - Can respond correctly when asked a technical question you don't know 19 | how to answer 20 | - Can incorporate project experiences and class experiences into 21 | technical questions 22 | 23 | Prep Work 24 | --------- 25 | 26 | As always, continue to work on your project. Aim to complete one or more user stories before the next class. 27 | 28 | Tasks 29 | ^^^^^ 30 | 31 | - Review the :ref:`interviewing` module again, in preparation for your interview assignment in class this week. 32 | - Review week 7 of the demo projects: :ref:`Event List Week 7 ` | :ref:`Expense Tracker Week 7 `. 33 | 34 | In Class 35 | -------- 36 | 37 | Activity: Standup 38 | ^^^^^^^^^^^^^^^^^ 39 | 40 | Before we get started with today's assignment, take a few minutes to have 41 | your standup. Go around the group and allow time for each person to talk 42 | about the user stories they completed this week, and the user stories they will be 43 | working on next week. 44 | 45 | Regroup: Mock Interview Setup 46 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 47 | 48 | Similar to the live coding assignment day, your instructor will provide 49 | you with instructions on where you will be interviewing and who you 50 | will be interviewing with. 51 | 52 | Activity: Mock Interview Assignment 53 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 54 | 55 | Things may be a little hectic, so please pay attention to announcements 56 | so you know when you will be interviewing. Your mock interview should 57 | only take 10-15 minutes, so with the remainder of your time work on your 58 | project! 59 | 60 | 61 | Assignments 62 | ----------- 63 | 64 | You will complete :ref:`assignment-mock-interview` in class. 65 | 66 | You should complete :ref:`assignment-project-presentation` before the next class. 67 | -------------------------------------------------------------------------------- /src/classes/8.rst: -------------------------------------------------------------------------------- 1 | Class 8: Project Review, Deployment, Continued Education 2 | ========================================================= 3 | 4 | Objectives 5 | ---------- 6 | 7 | Project Module 8 | ^^^^^^^^^^^^^^ 9 | 10 | - Understand the deployment process 11 | 12 | Career Module 13 | ^^^^^^^^^^^^^ 14 | 15 | - Understand how to continue learning on your own 16 | 17 | Prep Work 18 | --------- 19 | 20 | Tasks 21 | ^^^^^ 22 | 23 | - Read `Being a Developer After 40 `_. Read points 4 and 5 under the *Advice for the Young at Heart* section. The entire article is a good read, but the author specifically mentions tips about continued education in points 4 and 5. 24 | - Read `4 Things I Wish I Would Have Known When I Started My Software Development Career `_. This brief article in which a developer shares his thoughts on programming fads and continued learning. 25 | - Review week 8 of the demo projects: :ref:`Event List Week 8 ` | :ref:`Expense Tracker Week 8 `. 26 | 27 | In Class 28 | -------- 29 | 30 | Activity: Standup 31 | ^^^^^^^^^^^^^^^^^ 32 | 33 | Before we get started, take a minute to have your standup meeting. 34 | 35 | Activity: Continued Education 36 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 37 | 38 | For our final class today, we want to talk about continued education. You 39 | must continue learning on your own after this class, and you must 40 | continue learning on the job. We will talk about how to do this. 41 | 42 | Regroup: Project Review 43 | ^^^^^^^^^^^^^^^^^^^^^^^ 44 | 45 | As a final activity for LaunchCode, you will be having a final project 46 | review. Your instructor will introduce this activity and give you 47 | direction on how to proceed. 48 | 49 | Activity: Project Review 50 | ^^^^^^^^^^^^^^^^^^^^^^^^ 51 | 52 | You will meet with your mentor one-on-one. They will be reviewing your 53 | project. They want to see that you have made significant progress from 54 | your first project review 4 weeks ago. 55 | 56 | Assignment 57 | ---------- 58 | 59 | In class, you will complete your second :ref:`Project Review `. 60 | 61 | A final, optional assignment shows you how to deploy your application, so others may use it. While not required, we highly recommend that you complete :ref:`assignment-deployment`. 62 | -------------------------------------------------------------------------------- /src/conf.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | import sphinx_bootstrap_theme 4 | from recommonmark.transform import AutoStructify 5 | 6 | sys.path.append(os.path.abspath('../exts')) 7 | 8 | # -- Curriculum Site Settings ------------------------------------------------ 9 | 10 | # Customize for the specific site. Any options in the html_theme_options 11 | # dictionary below may be overriden here 12 | site_theme_options = { 13 | 'navbar_title': '', 14 | 'navbar_site_name': "Pages", 15 | 'bootswatch_theme': 'launchcode', 16 | } 17 | 18 | project = 'Liftoff' 19 | 20 | # -- Project information ----------------------------------------------------- 21 | 22 | 23 | copyright = '2020, LaunchCode' 24 | author = 'LaunchCode' 25 | 26 | # The short X.Y version 27 | version = '' 28 | # The full version, including alpha/beta/rc tags 29 | release = '' 30 | 31 | # -- General configuration --------------------------------------------------- 32 | 33 | # Add any Sphinx extension module names here, as strings. They can be 34 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom 35 | # ones. 36 | extensions = [ 37 | 'sphinx.ext.todo', 38 | 'sphinx.ext.githubpages', 39 | 'youtube', 40 | 'external_links', 41 | 'admonition_icons', 42 | 'replit', 43 | 'ordered_toctree', 44 | ] 45 | 46 | replit_user = 'launchcode' 47 | 48 | # Add any paths that contain templates here, relative to this directory. 49 | templates_path = ['./_templates'] 50 | 51 | # The suffix(es) of source filenames. 52 | source_suffix = ['.rst'] 53 | 54 | # Configure markdown parsing 55 | # source_parsers = {'.md': 'recommonmark.parser.CommonMarkParser'} 56 | 57 | html_copy_source = True 58 | html_show_sourcelink = True 59 | highlight_language = 'none' 60 | html_show_copyright = False 61 | html_show_sphinx = False 62 | 63 | # The master toctree document. 64 | master_doc = 'index' 65 | 66 | # The language for content autogenerated by Sphinx. Refer to documentation 67 | # for a list of supported languages. 68 | # 69 | # This is also used if you do content translation via gettext catalogs. 70 | # Usually you set "language" from the command line for these cases. 71 | language = None 72 | 73 | # List of patterns, relative to source directory, that match files and 74 | # directories to ignore when looking for source files. 75 | # This pattern also affects html_static_path and html_extra_path . 76 | exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', 'docs'] 77 | 78 | # The name of the Pygments (syntax highlighting) style to use. 79 | pygments_style = 'fruity' 80 | 81 | 82 | # -- Options for HTML output ------------------------------------------------- 83 | 84 | # The theme, via sphinx_bootstrap_theme 85 | html_theme = 'bootstrap' 86 | 87 | # sphinx_bootstrap_theme must be installed locally 88 | html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() 89 | 90 | # The logo that will appear in the navbar, relative to _static 91 | html_logo = '_static/images/logos/lc-ed-logo.png' 92 | 93 | # Theme-specific options 94 | default_theme_options = { 95 | # Navigation bar title 96 | 'navbar_title': 'Site', 97 | 98 | # Tab name for entire site. (Default: "Site") 99 | 'navbar_site_name': "Pages", 100 | 101 | # A list of tuples containing pages or urls to link to. 102 | # Valid tuples should be in the following forms: 103 | # (name, page) # a link to a page 104 | # (name, "/aa/bb", 1) # a link to an arbitrary relative url 105 | # (name, "http://example.com", True) # arbitrary absolute url 106 | # Note the "1" or "True" value above as the third argument to indicate 107 | # an arbitrary url. 108 | 'navbar_links': [ 109 | ("Classes", "index"), 110 | ("Modules", "modules/index"), 111 | ], 112 | 113 | # Render the next and previous page links in navbar. (Default: true) 114 | 'navbar_sidebarrel': False, 115 | 116 | # Render the current pages TOC in the navbar. (Default: true) 117 | 'navbar_pagenav': False, 118 | 119 | # Tab name for the current pages TOC. (Default: "Page") 120 | 'navbar_pagenav_name': "Contents", 121 | 122 | # Global TOC depth for "site" navbar tab. (Default: 1) 123 | # Switching to -1 shows all levels. 124 | 'globaltoc_depth': 1, 125 | 126 | # Include hidden TOCs in Site navbar? 127 | # 128 | # Note: If this is "false", you cannot have mixed ``:hidden:`` and 129 | # non-hidden ``toctree`` directives in the same page, or else the build 130 | # will break. 131 | # 132 | # Values: "true" (default) or "false" 133 | 'globaltoc_includehidden': "false", 134 | 135 | # HTML navbar class (Default: "navbar") to attach to
    element. 136 | # For black navbar, do "navbar navbar-inverse" 137 | 'navbar_class': "navbar", 138 | 139 | # Fix navigation bar to top of page? 140 | # Values: "true" (default) or "false" 141 | 'navbar_fixed_top': "true", 142 | 143 | # Location of link to source. 144 | # Options are "nav" (default), "footer" or anything else to exclude. 145 | 'source_link_position': "", 146 | 147 | 'bootswatch_theme': "launchcode", 148 | 'bootstrap_version': "3", 149 | 'html_logo_alt_text': 'LaunchCode logo', 150 | } 151 | 152 | html_theme_options = {**default_theme_options, **site_theme_options} 153 | 154 | # Add any paths that contain custom static files (such as style sheets) here, 155 | # relative to this directory. They are copied after the builtin static files, 156 | # so a file named "default.css" will overwrite the builtin "default.css". 157 | html_static_path = ['_static'] 158 | 159 | # Custom sidebar templates, must be a dictionary that maps document names 160 | # to template names. 161 | # 162 | # The default sidebars (for documents that don't match any pattern) are 163 | # defined by theme itself. Builtin themes are using these templates by 164 | # default: ``['localtoc.html', 'relations.html', 'sourcelink.html', 165 | # 'searchbox.html']``. 166 | # 167 | html_sidebars = { 168 | '**': [], 169 | 170 | } 171 | 172 | 173 | # -- Options for HTMLHelp output --------------------------------------------- 174 | 175 | # Output file base name for HTML help builder. 176 | htmlhelp_basename = 'CurriculumModuledoc' 177 | 178 | # -- Options for todo extension ---------------------------------------------- 179 | 180 | # If true, `todo` and `todoList` produce output, else they produce nothing. 181 | todo_include_todos = True 182 | 183 | 184 | def setup(app): 185 | app.add_css_file('fa/css/all.css') 186 | app.add_css_file('css/launchcode.css') 187 | app.add_css_file('css/site.css') 188 | app.add_config_value('recommonmark_config', { 189 | 'enable_eval_rst': True, 190 | }, True) 191 | app.add_transform(AutoStructify) 192 | -------------------------------------------------------------------------------- /src/genindex.rst: -------------------------------------------------------------------------------- 1 | .. _genindex: 2 | 3 | Index 4 | ===== -------------------------------------------------------------------------------- /src/index-full.rst: -------------------------------------------------------------------------------- 1 | Liftoff 2 | ======== 3 | 4 | Classes 5 | ------- 6 | 7 | .. toctree:: 8 | :maxdepth: 2 9 | :glob: 10 | 11 | classes/1 12 | classes/2 13 | classes/3 14 | classes/4 15 | classes/5 16 | classes/6 17 | classes/7 18 | classes/8 19 | 20 | .. toctree:: 21 | :hidden: 22 | :glob: 23 | 24 | todos 25 | modules/index 26 | 27 | 28 | 29 | .. toctree:: 30 | :numbered: 31 | :maxdepth: 1 32 | :name: chapterstoc 33 | 34 | .. toctree:: 35 | 36 | genindex 37 | 38 | 39 | -------------------------------------------------------------------------------- /src/index.rst: -------------------------------------------------------------------------------- 1 | Liftoff 2 | ======= 3 | 4 | Classes 5 | ------- 6 | 7 | .. toctree:: 8 | :maxdepth: 1 9 | :glob: 10 | 11 | classes/1 12 | classes/2 13 | classes/3 14 | classes/4 15 | classes/5 16 | classes/6 17 | classes/7 18 | classes/8 19 | 20 | .. toctree:: 21 | :hidden: 22 | :glob: 23 | 24 | todos 25 | modules/index 26 | index-full 27 | 28 | -------------------------------------------------------------------------------- /src/modules/assignments/deployment.rst: -------------------------------------------------------------------------------- 1 | .. _assignment-deployment: 2 | 3 | Assignment: Deployment 4 | ====================== 5 | 6 | This is an optional assignment, but one that is highly recommended. 7 | 8 | **Deploying** your app means setting up a server or service that hosts 9 | your app publicly on the Internet. Deploying your project is a great way to 10 | learn about the deployment process, which is part of every development 11 | team's workflow. It also gives you a way to point potential employers, 12 | mentors, and others to a working version of your application. 13 | 14 | How To Deploy Your App 15 | ---------------------- 16 | 17 | This varies quite a bit based on the language and framework your app 18 | uses, along with the particular host or service you are using. We provide 19 | resources on deploying Spring Boot applications to Pivotal Cloud 20 | Foundry, and on deploying .NET MVC applications to Azure App Service. 21 | 22 | :ref:`deploying-java-apps` 23 | 24 | `Local Git Deployment to Azure App 25 | Service `__ 26 | 27 | .. note:: 28 | 29 | If your project is not a Java or C# project, consult an instructor or your mentor for guidance on hosting and deployment. 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/modules/assignments/figures/dropbox-download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/assignments/figures/dropbox-download.png -------------------------------------------------------------------------------- /src/modules/assignments/live-coding.rst: -------------------------------------------------------------------------------- 1 | .. _assignment-live-coding: 2 | 3 | Assignment: Live Coding 4 | ======================= 5 | 6 | For this assignment, you will be required to successfully complete a 7 | live coding session with your mentor or LaunchCode staff member. The 8 | mentor or staff member will be grading you on your ability to move 9 | through the steps, communicate effectively, and work towards solving the 10 | problem. 11 | 12 | Scheduling Time 13 | --------------- 14 | 15 | Time will be allocated in class 4; however, you are more than welcome to 16 | attempt this assignment multiple times. If you want to take a second, or 17 | third, etc attempt, please talk to your mentor, who can find a time or 18 | connect you with a volunteer. 19 | 20 | Practice Makes Perfect 21 | ---------------------- 22 | 23 | Whether or not you pass this assignment the first time or the eighth, you should regularly practice coding problems of the type likely to come up in an interview. Here are some resources for doing so. 24 | 25 | - `hackerrank.com `_ 26 | - `codewars.com `_ 27 | - `exercism.io `_ 28 | - `leetcode.com `_ 29 | 30 | Check Your Grade! 31 | ----------------- 32 | 33 | Your mentor will mark you as complete in Canvas when you complete the 34 | exercise. But, you are still responsible for checking your status 35 | before the class ends. 36 | 37 | -------------------------------------------------------------------------------- /src/modules/assignments/mock-interview.rst: -------------------------------------------------------------------------------- 1 | .. _assignment-mock-interview: 2 | 3 | Assignment: Mock Interview 4 | ========================== 5 | 6 | For this assignment, you will go through a mock interview. The mock 7 | interview should last between 15-20 minutes, and you will be asked 8 | behavioral interview questions. 9 | 10 | Your interviewer is going to check that you are answering questions 11 | correctly and using experiences from your life as evidence to your 12 | answers. 13 | 14 | You do not need to submit anything. Your score will be recorded in 15 | Canvas for you. If you don't pass the assignment this time, you will 16 | need to schedule another mock interview with the course instructor. 17 | -------------------------------------------------------------------------------- /src/modules/assignments/online-profiles.rst: -------------------------------------------------------------------------------- 1 | .. _assignment-online-profiles: 2 | 3 | Assignment: Online Profiles 4 | =========================== 5 | 6 | The goal of this assignment is for you to spend some time building a 7 | technical resume, creating a professional LinkedIn account, and updating 8 | your GitHub profile to highlight your projects. 9 | 10 | Profiles 11 | -------- 12 | 13 | Within your ``liftoff-assignments`` repository, open up 14 | ``C1-Online_Profiles/README.md``. You will need to add: 15 | 16 | - a .PDF of your resume 17 | - a link to your GitHub profile 18 | - a link to your LinkedIn profile. 19 | 20 | To build your resume, follow the steps outlined in the :ref:`online-profiles` module. 21 | 22 | Commit your changes and push them to your GitHub repository. Your mentor 23 | will then be able to provide you with feedback via GitHub issues. 24 | 25 | Alternate Submissions 26 | --------------------- 27 | 28 | If you are unwilling to upload your resume to GitHub, you will still be 29 | responsible for getting your resume to your mentor to grade. Talk to 30 | them in class about the best way to get them your resume. They may have 31 | you print out a physical copy, or email/slack them a digital copy, or 32 | they may want to see your resume during class. 33 | -------------------------------------------------------------------------------- /src/modules/assignments/presentation-demo.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/assignments/presentation-demo.pdf -------------------------------------------------------------------------------- /src/modules/assignments/project-outline.rst: -------------------------------------------------------------------------------- 1 | .. _assignment-project-outline: 2 | 3 | Assignment: Project Outline 4 | =========================== 5 | 6 | For this assignment, you will submit a high-level outline of your 7 | project. This can, and likely will, change over time. In particular, 8 | your mentor will provide feedback and direction to help sharpen your 9 | ideas. So don't worry if you feel unsure about some aspects of the 10 | outline, or if you have to change some things later. 11 | 12 | Creating Your Outline 13 | --------------------- 14 | 15 | Within your ``liftoff-assignments`` repository, open up 16 | ``P2-Project_Outline/README.md``. You'll see a few sections headings in 17 | place for you. Flesh out your project outline by providing: 18 | 19 | 1. **Overview**: In 1-2 paragraphs, provide an "elevator pitch" for your 20 | project. This should be a high-level overview of your idea, in 21 | non-technical language. What will your app do? What might users find 22 | useful about it? Where did the idea come from? 23 | 24 | 2. **Features**: List 3-5 features that you will implement in your 25 | project. Each feature should have a name and a 1-2 sentence 26 | description. Here are a few examples for a blog application: 27 | 28 | - **User login**: Users will be able to create accounts and log in 29 | to the application. Each user will have a profile page. 30 | - **Search**: Users will be able to search for blog posts containing 31 | given text. 32 | - **Create Post**: Users will be able to create new blog posts when 33 | logged in. New posts will appear in the user's profile. 34 | 35 | 3. **Technologies**: What languages and technologies will you use to 36 | build your application? For example, for the `coding-events` application from 37 | Unit 2 - Java, the technologies would be: 38 | 39 | - Java 40 | - Spring Boot 41 | - MySQL 42 | - Hibernate 43 | - Thymeleaf templates 44 | 45 | 4. **What you'll have to learn**: In the course of building your 46 | project, you'll have to learn something new. Perhaps you want to use 47 | data from a public API, or add a bit of JavaScript to make your 48 | front-end more interactive. If you can't name the exact technology or 49 | technique that you'll have to learn, you should still be able to 50 | describe a problem that you have identified that you don't currently 51 | know how to solve. 52 | 53 | 5. **Project Tracker**: Link to your Trello board here. 54 | 55 | 6. **Enable GitHub Issues**: If you haven't already enabled :ref:`GitHub 56 | Issues ` do so before submitting 57 | this assignment. If you haven't enabled GitHub Issues yet your mentor 58 | will not be able to give you feedback on your project! 59 | 60 | Submitting Your Outline 61 | ----------------------- 62 | 63 | Once you have finished your project outline, commit and push your 64 | changes to your repository and submit the assignment on Canvas by 65 | submitting the URL to your outline. Your mentor will provide feedback 66 | after the assignment deadline. 67 | -------------------------------------------------------------------------------- /src/modules/assignments/project-planning.rst: -------------------------------------------------------------------------------- 1 | .. _assignment-project-planning: 2 | 3 | Assignment: Project Planning 4 | ============================= 5 | 6 | For this assignment, you'll create some initial plans for your project 7 | and create your project's repo. 8 | 9 | Getting Started 10 | --------------- 11 | 12 | Within your ``liftoff-assignments`` repository, open up 13 | ``P3-Project_Planning/README.md``. You'll see a couple of section 14 | headings in place for you. Flesh out your project plan by creating: 15 | 16 | #. A wireframe for each page in the MVP of your project, at least 3 17 | total. These can be hand-drawn wireframes that you have photographed 18 | using your smartphone or they can be PDF or image exports from a 19 | tool like `Moqups `__ or Google Drawings. 20 | Regardless of how you create them, your wireframes should be clear 21 | and readable and they should be added as files within your Git 22 | repository. Be sure to submit following the formatting directives in 23 | the README, *which includes adding your images to your repo, along 24 | with links to them within the README.* Consult `GitHub's markdown 25 | reference `__ 26 | as necessary. 27 | #. A link to your *public* project tracker (i.e. Trello). As part of the setup for this class, you created a project tracker and a 28 | project. Make sure you have added your MVP user stories and moved 29 | your initial stories into the "Next" column. Your 30 | stories should be clear and formatted as proper user stories and not 31 | just tasks. 32 | #. Create your initial project repository in GitHub. Don't worry, you 33 | can always rename this later. Link this in the above README as well. 34 | 35 | Submitting Your Work 36 | -------------------- 37 | 38 | Once you have finished both wireframe and user story components, commit 39 | and push your changes to your ``liftoff-assignments`` repository and 40 | submit the assignment on Canvas by submitting the URL to your README. 41 | Your mentor will provide feedback after the assignment deadline. 42 | -------------------------------------------------------------------------------- /src/modules/assignments/project-presentation.rst: -------------------------------------------------------------------------------- 1 | .. _assignment-project-presentation: 2 | 3 | Assignment: Project Presentation 4 | ================================ 5 | 6 | Odds are, you still have stories to complete on your project. That's okay. In fact, we 7 | encourage you to continue to work on your project well beyond the end of 8 | the Liftoff program. This helps you continue to learn and keep your skills 9 | sharp. And if you ever feel *done* with your project, start a new one! 10 | There's no better way to acquire and demonstrate skills than by working 11 | on a project. 12 | 13 | That said, we want to you to create a set of presentation slides 14 | summarizing your project. This serves multiple purposes: 15 | 16 | #. It shows us what you've accomplished to-date. 17 | #. It forces you to go through the process of outlining your project work at a high level, which is a useful exercise to prepare you to talk about it in interviews. It also makes it easy for you to give an actual presentation on your app in the future. 18 | #. Some of you will be asked to create a `demo video `__ that can help other learners with planning their projects. 19 | 20 | Your Presentation 21 | ----------------- 22 | 23 | You will be creating a slide deck based on the same template used for 24 | the `Capstone Project Demo 25 | videos `__. 26 | 27 | You may start with the template in one of the following formats: 28 | 29 | - `Google Slides `__ 30 | - `Powerpoint `__ 31 | 32 | To download the Powerpoint template, select *Download* from the menu at the top right of the Dropbox page. 33 | 34 | .. figure:: figures/dropbox-download.png 35 | :alt: The Download link is in the menu at the top right of Dropbox 36 | 37 | If you use Google Slides, you will need to first copy the document in 38 | order to make a version that you can edit. 39 | 40 | In addition to the videos linked above, you may refer to a :download:`demo 41 | version <./presentation-demo.pdf>` of the presentation. 42 | 43 | .. tip:: 44 | 45 | If you deployed your application, add the URL of where your app is hosted to one of your presentation slides (the main slide or the Demo slide work well for this). 46 | 47 | 48 | When you are finished, create a PDF version of your presentation and add it to 49 | your ``liftoff-assignments`` GitHub repository in the 50 | ``P6-Project_Presentation`` folder. Then stage, commit, and push the 51 | changes. Submit the link to your ``liftoff-assignments`` repository via 52 | Canvas. 53 | 54 | -------------------------------------------------------------------------------- /src/modules/assignments/project-review.rst: -------------------------------------------------------------------------------- 1 | .. _project-review-assignment: 2 | 3 | Assignment: Project Review 4 | ========================== 5 | 6 | During class, you'll spend 15-20 minutes with your mentor reviewing 7 | your project work to date. This will be less of a pair programming 8 | exercise and more of a code review exercise. Your mentor will check in 9 | with you on things like: 10 | 11 | - What stories have you been working on recently? 12 | - What code design decisions did you make and why? For example, how did you design your model classes and controllers? 13 | - What has been the most challenging aspect of your project so far? How did you overcome it? 14 | - What are you working on next? Your mentor will provide some tips for your next set of stories. 15 | 16 | If you have made progress on your project and you engage with your 17 | mentor to talk through your project, then 18 | you'll be marked as having completed this assignment. 19 | -------------------------------------------------------------------------------- /src/modules/assignments/project-setup.rst: -------------------------------------------------------------------------------- 1 | .. _assignment-project-setup: 2 | 3 | Assignment: Project Setup 4 | ========================= 5 | 6 | This assignment will get you set up and rolling with a basic project. By 7 | the end, you will have a GitHub repo that contains a working 8 | application. 9 | 10 | Getting Started 11 | --------------- 12 | 13 | The objectives for this assignment are simple to state: 14 | 15 | - Create a GitHub repository for your project, which includes a license 16 | - Make an initial commit that includes a basic, working "Hello, world!" 17 | level project 18 | - Start working on your first user story 19 | 20 | There are some situation-specific tips below. If you have questions 21 | about getting started on your project that are not covered here, talk to 22 | your mentor or the instructor. 23 | 24 | Pre-existing Projects 25 | ^^^^^^^^^^^^^^^^^^^^^ 26 | 27 | If you've already started a project, make sure it's in GitHub. Once you 28 | check that one off, take the extra step of creating a solid README file 29 | that gives a high-level overview of your project so that visitors to 30 | your profile can learn about it. 31 | 32 | Java / Spring Boot Project Tips 33 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 34 | 35 | Revisit `lesson 36 | videos `__ 37 | from the Java / Spring Boot skill track as needed. In particular, if 38 | you're starting from scratch, you'll find these useful: 39 | 40 | - `Intro to Spring Boot: 41 | Controllers `__ 42 | - for creating a basic "Hello, world!" application 43 | - `Using Git in 44 | IntelliJ `__ 45 | - for connecting your local Git repository to a GitHub repository 46 | 47 | C# / ASP.NET MVC Project Tips 48 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 49 | 50 | Revisit `lesson 51 | videos `__ 52 | from the C# / ASP.NET skill track as needed. In particular, if you're 53 | starting from scratch you'll find these useful: 54 | 55 | - `Intro to ASP.NET Core MVC: 56 | Controllers `__ 57 | - for creating a basic "Hello, world!" application 58 | - `Intro to Visual 59 | Studio `__ 60 | - for connecting your local Git repository to a GitHub repository 61 | 62 | Submitting Your Work 63 | -------------------- 64 | 65 | Within your ``liftoff-assignments`` repository, open up 66 | ``P4-Project_Setup/README.md``. Using Markdown formatting, add a link to 67 | your project repository. Then stage, commit, and push your changes. 68 | 69 | Once you have finished both wireframe and user story components, commit 70 | and push your changes to your ``liftoff-assignments`` repository, and 71 | submit the assignment on Canvas by submitting the URL to your outline. 72 | Your mentor will provide feedback after the assignment deadline. 73 | -------------------------------------------------------------------------------- /src/modules/career/figures/alan_turing_profile_picture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/career/figures/alan_turing_profile_picture.jpg -------------------------------------------------------------------------------- /src/modules/career/figures/copy-doc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/career/figures/copy-doc.png -------------------------------------------------------------------------------- /src/modules/career/figures/github_pinned_repo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/career/figures/github_pinned_repo.png -------------------------------------------------------------------------------- /src/modules/career/figures/interview-questions-chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/career/figures/interview-questions-chart.png -------------------------------------------------------------------------------- /src/modules/career/figures/resume-format-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/career/figures/resume-format-1.png -------------------------------------------------------------------------------- /src/modules/career/figures/resume-format-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/career/figures/resume-format-2.png -------------------------------------------------------------------------------- /src/modules/career/figures/resume-guide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/career/figures/resume-guide.png -------------------------------------------------------------------------------- /src/modules/career/figures/resume-template-links.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/career/figures/resume-template-links.png -------------------------------------------------------------------------------- /src/modules/career/figures/share-doc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/career/figures/share-doc.png -------------------------------------------------------------------------------- /src/modules/career/interviewing.rst: -------------------------------------------------------------------------------- 1 | .. _interviewing: 2 | 3 | Interviewing 4 | ============ 5 | 6 | Interviewing is crucial to actually land a job as a developer. In class, 7 | we will discuss the different aspects of the interview process and how 8 | to prepare for each part of the interview. 9 | 10 | The Technical Job Interview 11 | --------------------------- 12 | 13 | To warm up, here are a couple of interviews that place some context around the technical job interview: 14 | 15 | - :ref:`Mastering the Technical Interview` 16 | - `How to Prepare For (and Ace) the Technical Interview `_ 17 | - `10 Tech Interview Errors `_ 18 | 19 | 20 | Answering Interview Questions 21 | ----------------------------- 22 | 23 | Interviews can be nerve-wracking. Sometimes, your anxiety can cause your 24 | mind to go blank after an interviewer asks you a question. This in turn 25 | might make you even more anxious and cause you to blank on even more 26 | questions! One of the most sure-fire ways to reduce the anxiety you feel 27 | around an interview is to practice. If you feel prepared for your 28 | interview, a lot of the anxiety you feel will be reduced. 29 | 30 | This article will present a strategy for answering interview questions 31 | and give you an example of how you can use this strategy to prepare for 32 | your interviews. 33 | 34 | .. tip:: 35 | 36 | If you are more familiar with another strategy for answering interview 37 | questions, like the `STAR method `_, feel free to use whichever strategy you 38 | are more comfortable with. 39 | 40 | 41 | Claim and Evidence 42 | ^^^^^^^^^^^^^^^^^^ 43 | 44 | We understand that interviews can be intense, so we want to simplify our 45 | strategy as much as possible. 46 | 47 | Simply put, every answer you give in an interview should include at 48 | least two things: Your **claim** and **evidence** to support your claim. 49 | 50 | You don't have a lot of time for every interview question, so you want to 51 | use your time wisely. A claim is the shortest answer to a given 52 | question. It should be very straightforward and address the question. 53 | Ideally it is only one or two sentences. 54 | 55 | .. admonition:: Example 56 | 57 | **Question**: "What is your greatest strength?" 58 | 59 | **Claim**: "My greatest strength is my ability to learn quickly by using multiple resources." 60 | 61 | This claim answers the question directly. Interviewers like to hear a 62 | straightforward claim, as it sets the tone for your answer. The 63 | interviewer should not experience any confusion and have a strong 64 | understanding of the message you are trying to convey. 65 | 66 | However, as an interviewer, hearing a claim is not enough. An 67 | interviewer is trying to determine how you will behave if they hire you 68 | to do the job. The best way they can predict your future behavior is by 69 | examining how you behaved in similar situations in the past. They need 70 | more than just a claim; they need you to give an example from your 71 | career, education, or life that gives evidence to your claim. 72 | 73 | Simply put, evidence is a story from your experiences that prove your 74 | claim is correct. 75 | 76 | .. admonition:: Example 77 | 78 | **Question**: "What is your greatest strength?" 79 | 80 | **Claim**: "My greatest strength is my ability to learn quickly by using multiple resources." 81 | 82 | **Evidence**: "For example, LC101 requires all students to complete prep-work, attend lectures, participate in group activities, and complete assignments for every chapter. In addition to what LC101 required, I also set up a study group and invited all the students from my class to join. Our group met on Saturday mornings. We would review the concepts covered in our course and we worked through FreeCodeCamp's Front End Development lessons after we had completed our assigned LC101 work. Not only was I challenging myself to learn an additional programming language with this new resource, but it helped reinforce the concepts I was learning in LC101." 83 | 84 | This story contains lots of evidence that supports the original claim. 85 | The story they shared mentions FreeCodeCamp and LC101, 86 | and additional collaboration in an organized small group. The interviewer can further 87 | trust this person's claim because they have evidence to support the 88 | claim. 89 | 90 | .. admonition:: Example 91 | 92 | **Question**: "Tell us about a difficult project that you ultimately failed." 93 | 94 | **Claim**: "I initially decided to learn programming on my own and tried to make it through CS50x online. I was not able to keep up with the pace of the class and ultimately had to stop. But I learned from this experience and was able to adapt some habits that made me successful in LC101." 95 | 96 | **Evidence**: "When I first started CS50x, I was excited to learn to program but didn't have any experience. I waited too long after watching the first lecture to start my assignment, and I struggled with setting up the environment CS50x wanted us to use. By the time I had everything set up and figured out how to solve the problem, my assignment was a few days late. Once I was behind, it was hard for me to catch up, and I eventually stopped doing the course work. 97 | 98 | "I made sure that when I signed up for LC101 that I started my assignments early and asked questions often. I started a small study group to make sure I was working with other programmers and I used outside resources to help me when I was stuck. All three of these changes helped me excel in LC101, and now I feel confident about my programming skills." 99 | 100 | This claim is a little longer, because they are trying to fully explain 101 | the situation. They know the interviewer doesn't want to just hear about 102 | a failure, but how they learned from a failure. So they have to both 103 | fully explain their failure, and how they learned from that experience. 104 | This makes both the claim and the evidence a little longer. 105 | 106 | The claim is still short, to the point, and at no time does it stray 107 | from the original question. 108 | 109 | The story provides lots of evidence about what went wrong, what this 110 | person learned, and ultimately the steps they took to ensure they didn't 111 | fail another learning opportunity. 112 | 113 | Next Steps 114 | ^^^^^^^^^^ 115 | 116 | In class we are going to have a presentation about the different pieces 117 | of the technical interview, and will briefly talk about how to answer 118 | interview questions. We will then have a small group activity where you 119 | will practice asking interview questions to your fellow classmates, and 120 | give them feedback. 121 | 122 | As you give them feedback, remember the claim-evidence model discussed above. 123 | Are they answering the question and giving specific examples from their life? To prepare for this activity, you can begin practicing your own responses to interview questions you have encountered in the past. 124 | -------------------------------------------------------------------------------- /src/modules/career/live-coding.rst: -------------------------------------------------------------------------------- 1 | .. _live-coding: 2 | 3 | Live Coding 4 | =========== 5 | 6 | Live coding is a part of the interview process. The best way to prepare 7 | for live coding is to practice, practice, practice. Today we will see a 8 | strategy for solving live coding problems and we will get more practice in 9 | class. 10 | 11 | Live Coding Demo 12 | ---------------- 13 | 14 | Watch a demonstration of the live coding process, focusing on the steps followed. 15 | An interviewer is more concerned with your problem-solving process than the 16 | correctness of your answer, so following this detailed, logical, step-by-step process 17 | is the best way to demonstrate your skills. 18 | 19 | .. raw:: html 20 | 21 | 22 | 23 | 24 | Live Coding Steps 25 | ----------------- 26 | 27 | 1. Gather Requirements 28 | 2. Break the Problem Down 29 | 3. Pseudocode 30 | 4. Write Syntax 31 | 5. Test 32 | 6. Make Changes 33 | 34 | Gather Requirements 35 | ^^^^^^^^^^^^^^^^^^^ 36 | 37 | In the video, the interviewer gave us requirements but they were 38 | intentionally vague. The first thing the interviewee had to do was to 39 | gather additional requirements to have a strong understanding of the 40 | problem. 41 | 42 | This required communication on the interviewee's behalf. They went as 43 | far as to talk through the given input, and create an output that was 44 | verified as correct by the interviewer. 45 | 46 | Break the Problem Down 47 | ^^^^^^^^^^^^^^^^^^^^^^ 48 | 49 | After successfully gathering the requirements, the interviewee broke the 50 | problem down into two separate pieces. Identifying what needed to be done 51 | first, and what needed to be done next. 52 | 53 | Breaking the problem down gives the interviewee the opportunity to focus 54 | on one aspect of the problem at a time. 55 | 56 | Pseudocode 57 | ^^^^^^^^^^ 58 | 59 | Once the interviewee has a hold on the separate pieces of their intended 60 | solution, they can begin working on the logic of the problem. 61 | 62 | For the first chunk of their proposed solution, the interviewee wrote 63 | "Loop over input, remove vowels". 64 | 65 | For the second portion of their proposed solution, the interviewee wrote 66 | "Loop over vowel-less str, remove odd index chars". 67 | 68 | Psuedocoding the problem promotes communication around the proposed 69 | solution. It is a way to share thoughts with the interviewer without 70 | starting to code. 71 | 72 | Write Syntax 73 | ^^^^^^^^^^^^ 74 | 75 | Now that we have a plan, and a map drawn out in the form of our 76 | pseudocode, we can start coding! 77 | 78 | You'll notice the interviewee is talking through their actions as they 79 | write code down. This shows the interviewee has the ability to 80 | communicate effectively with another developer. 81 | 82 | As you write syntax, you may find that you still don't have all of the 83 | requirements. In this video, the interviewee did not know if the letter 84 | 'y' was considered a vowel. To overcome this confusion, they simply asked 85 | the interviewer for more clarity on the requirements! 86 | 87 | While writing their code, occasionally the interviewee would realize 88 | they didn't declare a variable before, or forgot to include something 89 | above their already written code. That is okay! You want to show the 90 | interviewer your problem-solving process. Very rarely will you write 91 | something perfect from top to bottom. Don't hesitate adding new lines 92 | above your already written solution if you need to declare more 93 | variables! 94 | 95 | Test 96 | ^^^^ 97 | 98 | After the interviewee finishes the first version of their solution, they 99 | need to test it! As programmers, we don't usually get the right answer on 100 | the first try. Without our debugger to point us in the correct 101 | direction, we are left to walking through a test case ourselves. 102 | 103 | You'll notice the interviewee keeps track of the variables throughout 104 | the entire program by writing them on the board and updating them as 105 | they step through the program line by line. 106 | 107 | At the end of the program, the interviewee can compare their produced 108 | answer and compare it to the answer that was agreed upon when they 109 | gathered the requirements of this problem. 110 | 111 | Make Changes 112 | ^^^^^^^^^^^^ 113 | 114 | When testing your solution, you will more than likely find that you made 115 | a mistake. It may be a small mistake, or a big mistake. Making a mistake 116 | can be a great thing in a live coding session. Take a step back and try 117 | to figure out where the mistake is happening. This is usually very 118 | apparent in the testing phase if you test line by line. 119 | 120 | You want to show the interviewer you have strong problem-solving skills 121 | and part of problem-solving is being able to figure out mistakes you 122 | have made in your own solution and then fixing them. 123 | 124 | If you find a mistake in your solution, great! Fix the mistake, and test 125 | your solution again. 126 | -------------------------------------------------------------------------------- /src/modules/career/online-profiles.rst: -------------------------------------------------------------------------------- 1 | .. _online-profiles: 2 | 3 | Online Profiles 4 | =============== 5 | 6 | This career module focuses on the profiles companies will view 7 | before and during the interview process. We will manipulate these 8 | profiles in a way that will assist you during your job search. For 9 | prep work, we will examine the following: a resume, a GitHub profile, and 10 | a LinkedIn profile. We will go over what makes the profile good and 11 | highlight where the profile can be improved. This will give us a list of 12 | things to include, as well as things to leave out of each profile. 13 | 14 | Technical Resumes 15 | ----------------- 16 | 17 | A resume is a *crucial* part of your job search. We're not going to 18 | ramble on explaining what a resume is; it's a part of the hiring 19 | process for most industries. What we will focus on instead is how to 20 | create a technical resume that will highlight the skills you bring to a 21 | technical position. 22 | 23 | Technical Resume Format 24 | ^^^^^^^^^^^^^^^^^^^^^^^ 25 | 26 | For the apprenticeship program, we require you to complete a resume using `our template guide `_. We require resumes of this format in order to enter our apprenticeship program. Companies appreciate the shared template and it makes it easier for you to focus on the content of your resume rather than the style 27 | 28 | Upon clicking the link above, you will be brought to this page. 29 | 30 | .. figure:: figures/resume-guide.png 31 | :width: 800px 32 | 33 | LaunchCode Resume Guide 34 | 35 | Read through the entire guide. At the bottom, you will links to four different templates. Choose the option that best describes your background. 36 | 37 | .. figure:: figures/resume-template-links.png 38 | :width: 800px 39 | :alt: Resume Template Links 40 | 41 | Resume Template Links 42 | 43 | You will then be directed to this page. Click *Make a copy* to make your own editable resume. 44 | 45 | .. figure:: figures/copy-doc.png 46 | :width: 600px 47 | :alt: Copy document prompt 48 | 49 | Copy document prompt 50 | 51 | From there, you can pick one of two template formats to edit. To see the second format option, scroll down within the document. 52 | 53 | Edit only the template text and NOT the formatting. Do NOT delete the LaunchCode brands on the top right. If you already have text from an older resume, you can copy and paste text into your new resume. When doing so, be sure to match destination formatting (Command+SHIFT+V for Macs and CTRL+SHIFT+V for Windows). 54 | 55 | .. figure:: figures/resume-format-1.png 56 | :width: 800px 57 | :alt: First resume format option 58 | 59 | First resume format option 60 | 61 | .. figure:: figures/resume-format-2.png 62 | :width: 800px 63 | :alt: Second resume format option 64 | 65 | Second resume format option 66 | 67 | After completing your resume template, share it with your course manager by clicking the blue *Share* button in the top right corner and entering their email address. It's a good idea to give them edit access so they can fix typos and other errors. 68 | 69 | .. figure:: figures/share-doc.png 70 | :width: 600px 71 | :alt: Share document prompt 72 | 73 | Share document prompt 74 | 75 | GitHub Profiles 76 | --------------- 77 | 78 | Your GitHub profile can be an immensely powerful tool in showing other 79 | people projects you have completed, how often you work on projects, how 80 | long you've been a programmer, and the different languages and 81 | technologies you have worked with. Also, the more you use GitHub, the 82 | more comfortable you will be with using any form of version control. 83 | 84 | After signing into your GitHub profile, you can click on the picture. 85 | This will take you to your account settings and will allow you to update 86 | your profile settings. You can upload a picture, change your bio, 87 | display an email address, and more! 88 | 89 | GitHub Username 90 | ^^^^^^^^^^^^^^^ 91 | 92 | Your GitHub username should be professional, much like your professional 93 | email it should be some variation of your name. You should avoid twitter 94 | handles, gamertags, or anything that is not a variation of your name. 95 | 96 | ``a.lovelace`` is a great GitHub profile name for Ada Lovelace! 97 | 98 | ``countessofcomputers`` is a poor GitHub profile name for Ada Lovelace---although she has a steeped background with computers, she should still 99 | choose a professional GitHub profile name. 100 | 101 | You should also include your professional email address with this GitHub 102 | profile. 103 | 104 | GitHub Profile Picture 105 | ^^^^^^^^^^^^^^^^^^^^^^ 106 | 107 | First impressions are very important. You should include a nice looking 108 | shot of your face for your GitHub profile. 109 | 110 | This would be a great GitHub profile picture for Alan Turing: 111 | 112 | .. figure:: figures/alan_turing_profile_picture.jpg 113 | :alt: Alan Turing Profile Picture 114 | 115 | Alan Turing Profile Picture 116 | 117 | Take note that *your GitHub profile is public facing!* If you do not 118 | wish to upload a picture of yourself to GitHub, you can still pass the 119 | assignment. Notify your mentor if you are not comfortable uploading a 120 | picture of yourself to your GitHub profile. 121 | 122 | GitHub Profile Bio 123 | ^^^^^^^^^^^^^^^^^^ 124 | 125 | You should include a bio for your GitHub profile. It should quickly 126 | state who you are and what you are looking for. 127 | 128 | A great GitHub bio might look like this: 129 | 130 | :: 131 | 132 | Bio: 133 | I recently completed LC101 and am currently learning more about Java, Spring, and Hibernate. I am actively looking for development positions. 134 | 135 | Pinned Repositories 136 | ^^^^^^^^^^^^^^^^^^^ 137 | 138 | An awesome feature of GitHub is that it allows you to pin repositories! 139 | If you have linked a repo to your resume or simply want to highlight a 140 | repository, you can mark the repository as a pinned repository and it 141 | will be highlighted to anyone that visits your GitHub profile. 142 | 143 | Below you will find an image of my personal GitHub account that has 4 144 | pinned repositories. A repository of the live-coding problems we worked 145 | on in our last class, a repo for LC101 examples I created while teaching 146 | that class, a repo with instruction slides created for teaching, and finally a repo called 147 | ``gmail_example`` which is a small Flask project I created to show how to 148 | connect to Gmail's API and to send emails from a web app. 149 | 150 | .. figure:: figures/github_pinned_repo.png 151 | :alt: GitHub Pinned Repositories 152 | :width: 800px 153 | 154 | GitHub Pinned Repositories 155 | 156 | Anyone that comes to my main profile page will find these 4 repositories 157 | before anything else. 158 | 159 | .. tip:: 160 | 161 | You can set your pinned repositories by clicking the *Customize your 162 | pinned repositories* text you see in the top right corner of the image. 163 | 164 | Project README 165 | ^^^^^^^^^^^^^^ 166 | 167 | The final aspect that makes for a great GitHub profile is a specific 168 | project README file. 169 | 170 | A README file is a markdown file that is displayed at the bottom of the 171 | repository. This is where you can include the requirements of your 172 | project and a brief description of what your project does. If someone 173 | wants to clone and run your project, this is where they will learn what 174 | is needed to do so. As you are searching for jobs, you should have a project 175 | README file for every project you want to share with a potential employer. 176 | 177 | The README gives me an ability to explain to the interviewer what my 178 | project does, what skills I used in my project, and what I am going to 179 | do with this project in the future. 180 | 181 | You can add in a requirements section that shows what dependencies and 182 | environment they will need to use to run the project. 183 | 184 | You can also include images in your Markdown file that may include 185 | screenshots of wireframes, actual views, or model diagrams of your 186 | project. That way, you can show off what you are planning for the 187 | future of the project. 188 | 189 | GitHub is public 190 | ^^^^^^^^^^^^^^^^ 191 | 192 | As a final reminder, your GitHub profile is public. Anyone can search for 193 | it and view any of the information on your profile. If you have any 194 | issues with uploading personal information to your GitHub profile, please 195 | talk with your mentor about acceptable usernames, pictures, and bios. 196 | You will still be required to use GitHub, but we do not want you sharing 197 | any information you are not comfortable with sharing. 198 | 199 | 200 | LinkedIn Profiles 201 | ----------------- 202 | 203 | You can think of your LinkedIn profile as your digital resume. It should 204 | contain your professional experience, skills, and education. 205 | 206 | Your GitHub profile is a great demonstration of your technical skills, 207 | but it is only very beneficial to a technical individual. Your LinkedIn 208 | profile should be geared towards the HR department, giving you a chance 209 | to further explain things about yourself. 210 | 211 | Much like your GitHub profile, you want to associate a professional 212 | email address with your LinkedIn account and have a nice looking 213 | headshot to include as a picture. 214 | 215 | Contact Information 216 | ^^^^^^^^^^^^^^^^^^^ 217 | 218 | Your contact information should include your professional email address 219 | and your phone number. 220 | 221 | Summary 222 | ^^^^^^^ 223 | 224 | LinkedIn gives you the ability to write a summary. Most interviewers 225 | read this to get a high level understanding of what you are looking to 226 | do. So put some passion into writing your summary! 227 | 228 | Core Skills 229 | ^^^^^^^^^^^ 230 | 231 | LinkedIn has a section dedicated to skills. This is the area where you 232 | may like to include some of the technical skills you have recently learned, 233 | as well as other soft skills you have accumulated from non-tech education 234 | or experience. 235 | 236 | History 237 | ^^^^^^^ 238 | 239 | A great advantage of LinkedIn over a resume is that you can greatly 240 | expand upon your work history and education. You can also use the social 241 | networking aspect of LinkedIn to connect with past coworkers and 242 | classmates that can verify the skills you include in your profile. 243 | 244 | 245 | For some good tips, read `10 Examples of Highly Impactful LinkedIn Profiles `_ 246 | -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/create_event_form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/create_event_form.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/create_event_form_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/create_event_form_new.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/event-log-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/event-log-login.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/event-log-logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/event-log-logout.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/event-log-register.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/event-log-register.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/event-log-welcome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/event-log-welcome.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/event_details_view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/event_details_view.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/event_details_view_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/event_details_view_new.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/event_error_message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/event_error_message.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/event_listing_view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/event_listing_view.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/event_listing_view_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/event_listing_view_new.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/initial-commits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/initial-commits.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/sprint_1_stories.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/sprint_1_stories.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/sprint_2_commits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/sprint_2_commits.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/sprint_2_commits_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/sprint_2_commits_2.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/sprint_2_stories.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/sprint_2_stories.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/sprint_2_stories_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/sprint_2_stories_2.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/sprint_3_commits_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/sprint_3_commits_1.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/sprint_3_commits_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/sprint_3_commits_2.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/sprint_3_stories_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/sprint_3_stories_1.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/sprint_3_stories_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/sprint_3_stories_2.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/sprint_4_commits_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/sprint_4_commits_1.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/sprint_4_stories.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/sprint_4_stories.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/figures/sprint_4_stories_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/figures/sprint_4_stories_2.png -------------------------------------------------------------------------------- /src/modules/demo-projects/event-log/project-presentation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/event-log/project-presentation.pdf -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/Expense_Tracker_Presentation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/Expense_Tracker_Presentation.pdf -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-archive-category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-archive-category.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-change-email-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-change-email-1.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-change-email-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-change-email-2.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-change-password-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-change-password-1.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-change-password-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-change-password-2.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-create-category-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-create-category-1.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-create-category.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-create-category.JPG -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-create-category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-create-category.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-create-expense.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-create-expense.JPG -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-create-expense.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-create-expense.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-delete-expense-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-delete-expense-1.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-delete-expense-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-delete-expense-2.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-edit-expense-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-edit-expense-2.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-edit-expense1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-edit-expense1.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-initial-commit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-initial-commit.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-login.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-login.JPG -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-login.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-menu.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-menu.JPG -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-register.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-register.JPG -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-register.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-register.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-unarchive-category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-unarchive-category.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-view-categories.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-view-categories.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-view-expenses.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-view-expenses.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/expense-tracker-wireframes.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/expense-tracker-wireframes.JPG -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/sprint_1_stories.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/sprint_1_stories.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/sprint_2_commits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/sprint_2_commits.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/sprint_2_commits_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/sprint_2_commits_2.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/sprint_2_commits_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/sprint_2_commits_3.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/sprint_2_stories.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/sprint_2_stories.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/sprint_2_stories_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/sprint_2_stories_2.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/sprint_2_stories_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/sprint_2_stories_3.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/sprint_3_commits_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/sprint_3_commits_1.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/sprint_3_commits_final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/sprint_3_commits_final.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/sprint_3_stories_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/sprint_3_stories_1.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/sprint_3_stories_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/sprint_3_stories_2.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/sprint_4_commits_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/sprint_4_commits_1.png -------------------------------------------------------------------------------- /src/modules/demo-projects/expense-tracker/figures/sprint_4_stories.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/demo-projects/expense-tracker/figures/sprint_4_stories.png -------------------------------------------------------------------------------- /src/modules/demo-projects/index.rst: -------------------------------------------------------------------------------- 1 | .. _demo-projects: 2 | 3 | Demo Projects 4 | ============= 5 | 6 | These demo projects were created to give you an idea of project workflow. 7 | They are also useful in understanding the size and scope of a typical project. 8 | 9 | .. toctree:: 10 | :maxdepth: 1 11 | 12 | event-log/index 13 | expense-tracker/index 14 | 15 | .. note:: 16 | 17 | These projects use Pivotal Tracker but in this class, 18 | you will use Trello as a project management tool. 19 | -------------------------------------------------------------------------------- /src/modules/git/figures/active-github-profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/git/figures/active-github-profile.png -------------------------------------------------------------------------------- /src/modules/git/figures/add-comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/git/figures/add-comment.png -------------------------------------------------------------------------------- /src/modules/git/figures/approve-changes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/git/figures/approve-changes.png -------------------------------------------------------------------------------- /src/modules/git/figures/assign-pr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/git/figures/assign-pr.png -------------------------------------------------------------------------------- /src/modules/git/figures/confirm-merge-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/git/figures/confirm-merge-button.png -------------------------------------------------------------------------------- /src/modules/git/figures/create-pr-form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/git/figures/create-pr-form.png -------------------------------------------------------------------------------- /src/modules/git/figures/create-pr-from-branch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/git/figures/create-pr-from-branch.png -------------------------------------------------------------------------------- /src/modules/git/figures/delete-branch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/git/figures/delete-branch.png -------------------------------------------------------------------------------- /src/modules/git/figures/github_issues_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/git/figures/github_issues_1.png -------------------------------------------------------------------------------- /src/modules/git/figures/github_issues_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/git/figures/github_issues_2.png -------------------------------------------------------------------------------- /src/modules/git/figures/github_issues_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/git/figures/github_issues_3.png -------------------------------------------------------------------------------- /src/modules/git/figures/github_issues_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/git/figures/github_issues_4.png -------------------------------------------------------------------------------- /src/modules/git/figures/github_issues_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/git/figures/github_issues_5.png -------------------------------------------------------------------------------- /src/modules/git/figures/merge-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/git/figures/merge-button.png -------------------------------------------------------------------------------- /src/modules/git/figures/reply-after-fixing-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/git/figures/reply-after-fixing-code.png -------------------------------------------------------------------------------- /src/modules/git/git-commits.rst: -------------------------------------------------------------------------------- 1 | .. _regular-git-commits: 2 | 3 | Regular Git Commits 4 | =================== 5 | 6 | Version Control is an invaluable skill as a developer. It allows you 7 | keep track of the different versions of your project. As a record of 8 | everything you have done, it provides some useful benefits: 9 | 10 | - Review code you, or other developers, wrote in the past 11 | - `Undo mistakes you make in your 12 | project `__ 13 | - Create branches that give you a clean space to work on new ideas 14 | without jeopardizing the current state of your project 15 | 16 | In Liftoff, we will be using Git as our version control software. If you 17 | completed LC101, you were introduced to the basics of the Git workflow: 18 | staging (``git add``), committing (``git commit``), and pushing to a remote 19 | repository (``git push``). 20 | 21 | If you feel a little rusty on some of the basics, take a look at the `Git 22 | Handbook `__ 23 | created by GitHub! 24 | 25 | Commit Yourself to Using Git 26 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 27 | 28 | You won't get the benefits of Git listed above, if you don't use it! 29 | 30 | You should incorporate Git into your coding work. When you've finished a 31 | user story, you should stage, commit, and push. When you've squashed a 32 | bug, you should stage, commit, and push. If you are working before bed, 33 | before you call it a night, you should stage, commit, and push. If you 34 | are working before work, you should stage, commit, and push before you 35 | have to leave. The more versions you have of your project, the more 36 | places you can revert back to. 37 | 38 | As you advance in your career, you will learn more appropriate times to 39 | stage, commit, and push. Most teams, or companies, define when their 40 | developers should stage, commit, and push. Some companies will want you 41 | to only commit if you have finished a user story. Others may want you to 42 | create a branch for everything you do, and so staging, committing, and 43 | pushing is left up to you, but you are only allowed to merge your branch 44 | when you've met certain conditions. 45 | 46 | *As you are working on your personal project, you can and should commit 47 | as often as you'd like.* 48 | 49 | Hiring Managers Love Active GitHub Profiles 50 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 51 | 52 | Every time you make a contribution to your GitHub profile (pushing to a 53 | master branch, merging a branch into master, creating a new repository, 54 | etc.), GitHub records your contribution and displays it to the public. 55 | 56 | Let's take a look. 57 | 58 | .. figure:: figures/active-github-profile.png 59 | :alt: Active GitHub Profile 60 | 61 | Active GitHub Profile 62 | 63 | As you can see, Paul has made 541 contributions in the last year. You can 64 | see a heatmap showing when and how many contributions Paul made over the 65 | past year. From this information, you can see he regularly codes. He has 66 | dedicated much of his time to programming and very rarely does a full 67 | week go by where he doesn't contribute in some way. Most weeks he 68 | contributes multiple things. 69 | 70 | Everyone's profile looks the same when they start and by regularly 71 | staging, committing, and pushing work to your project repository, you 72 | will start to build up contributions. Set a goal for yourself to 73 | contribute to your GitHub account a certain number of times each week. 74 | By the end of this class, you will have the start of a GitHub profile 75 | that catches the interest of hiring managers. 76 | 77 | You will learn more about making a good GitHub profile in the prep work 78 | around Online Profiles. 79 | -------------------------------------------------------------------------------- /src/modules/git/git-refresher.rst: -------------------------------------------------------------------------------- 1 | .. _git-refresher: 2 | 3 | Git Refresher 4 | ============= 5 | 6 | Git is a powerful tool that can be overwhelming to use at times. This guide is a reminder of Git basics 7 | and some best practices. 8 | 9 | 10 | Read the Git Messages! 11 | ---------------------- 12 | When using Git in a terminal, Git tries to help you out by giving detailed messages. Read those messages 13 | carefully. If a command isn't working as expected, take your time and see what Git is telling you. 14 | Sometimes those messages will tell you exactly how to fix your issues. If the Git message doesn't solve 15 | your issue, it can help you know what terms to search for when looking for help. 16 | 17 | 18 | Cloning the Repository 19 | ---------------------- 20 | When starting on the project, you will first need to clone the remote repository to your computer. 21 | You will clone the repository by going to the repository page on GitHub and clicking the clone button. 22 | The clone menu will provide two options. For the group project, we suggest using SSH, however cloning 23 | with HTTPS will also work. 24 | 25 | Both options will create a Git repository on your local computer with all the files, branches, and commits 26 | that are present in the remote repository. 27 | 28 | Cloning Options: 29 | 30 | #. SSH 31 | 32 | * Uses SSH to clone the repository. 33 | 34 | * Example: ``git clone git@github.com:LaunchCodeEducation/liftoff.git`` 35 | 36 | * Requires a file to be created and uploaded to GitHub. 37 | * You do NOT have to enter your password when pushing commits to a remote repository. 38 | * `Instructions for using SSH `_ 39 | 40 | #. HTTPS 41 | 42 | * Uses an HTTPS url for the repository. 43 | 44 | * Example: ``git clone https://github.com/LaunchCodeEducation/liftoff.git`` 45 | 46 | * Requires that you enter your password pushing commits to a remote repository. 47 | 48 | 49 | Keeping Local Repository Up to Date 50 | ----------------------------------- 51 | Right after you clone the remote repository, your local copy will be up to date. However, as the project 52 | progresses new branches and commits will be pushed to the remote repository. Your local repository 53 | will NOT automatically update itself. 54 | 55 | ``git fetch`` 56 | ^^^^^^^^^^^^^ 57 | The fetch command makes your local repository aware of all the new commits and branches on the remote repository. 58 | Git fetch does NOT update any of your local branches, it brings your local Git repository's data about the 59 | available branches and commits up to date. 60 | 61 | ``git pull`` 62 | ^^^^^^^^^^^^ 63 | The pull command is used to update your current branch with new commits that have been pushed to that branch on 64 | the remote repository. The pull command is a combination of two other Git commands. First, a ``git fetch`` runs 65 | to make sure you local repository is aware of all the new data on the remote repository. Second, a ``git merge`` 66 | runs to merge in any new commits for tne current branch. 67 | 68 | Remember that Git does NOT keep your local branches up to date. For group projects, you will need to pull in the commits and branches 69 | being created by your group members. 70 | 71 | 72 | Creating New Branches 73 | --------------------- 74 | As detailed in the :ref:`Git workflow section `, you should create a new branch for each feature you 75 | are working on. This allows features to be developed in isolation, to avoid disrupting other features that are also 76 | being worked on. 77 | 78 | Creating a new branch: 79 | 80 | #. Use ``git status`` to make sure you are on the base branch you want. The base branch is usually master. 81 | 82 | * WARNING: if you have uncommitted changes, you can: 83 | 84 | #. Stash them. 85 | #. Commit them to the current branch. 86 | #. Leave them and commit them on the new branch. 87 | 88 | #. Use ``git checkout -b feature-branch-name`` to create and switch to the new branch. 89 | #. You can now make commits and push this branch to the remote repository. 90 | 91 | 92 | Committing Your Work 93 | -------------------- 94 | You need to have *write* access to the remote repository. If working on a group project, this is setup by the group mentor. After you have write 95 | access, you can push up commits to the remote repository. 96 | 97 | #. Run ``git status`` to verify the changes you made show up as not staged or untracked. 98 | 99 | * It's also a good idea to double check you are on the correct branch. 100 | 101 | #. Run ``git add .`` to stage all files for commit. 102 | 103 | * It's best to run this command from the root folder of the repository 104 | * The ``.`` refers to the current directory. 105 | * You can stage one file at a time if you need to commit only certain files. 106 | 107 | * In that case, replace the ``.`` with a file name or path. 108 | 109 | #. Run ``git status`` to verify that the changes have been staged. 110 | #. Run ``git commit -m "short description"`` to make a commit containing all staged changes. 111 | #. Run ``git status`` to verify that there are no uncommitted changes. 112 | 113 | 114 | Pushing to Remote Repository 115 | ---------------------------- 116 | When you make a new branch or new commits, you can push them to the remote repository so that 117 | other people can access them. 118 | 119 | 1. Run ``git status`` to verify your branch and all changes have been committed. 120 | 121 | * Are you noticing a pattern of using ``git status``? 122 | 123 | 2. Run ``git push``. 124 | 125 | * This defaults to pushing to ``origin master`` which is the remote repository. 126 | 127 | 3. Review the Git message to see if the push worked. 128 | 129 | * Git may need you to to do a ``git pull`` before pushing. 130 | 131 | 132 | Cheat Sheet for Committing and Pushing 133 | -------------------------------------- 134 | Remember these steps when you need to commit and push your code: 135 | 136 | 1. ``git status`` - verify branch 137 | 2. ``git add .`` - stage changes 138 | 3. ``git commit -m "short description"`` - commit changes 139 | 4. ``git push`` - push commits to remote repository 140 | 141 | 142 | Stashing Instead of Committing 143 | ------------------------------ 144 | It may happen that you go to start a new branch but the results from ``git status`` show that you have 145 | uncommitted changes. Even worse, you may not remember what these changes were for. Instead of committing 146 | the changes to the current branch, you can use ``git stash`` to store those changes for future review. 147 | 148 | Read this 149 | `summary of stash command `_ 150 | for how to use stash. 151 | 152 | 153 | Git Commands 154 | ------------ 155 | For a full list of Git commands and more detailed examples, see the resources section below. 156 | 157 | .. list-table:: 158 | :widths: auto 159 | :header-rows: 1 160 | 161 | * - Command 162 | - Description 163 | * - ``git help`` 164 | - Information about git commands 165 | * - ``git COMMAND -h`` 166 | - Information and options for the specific COMMAND 167 | * - ``git clone A-URL-GOES-HERE`` 168 | - Clones a remote repository into a local folder 169 | * - ``git branch -a`` 170 | - Shows all local and remote branches 171 | * - ``git checkout BRANCH-NAME`` 172 | - Switches the branch you are on to BRANCH-NAME 173 | * - ``git checkout -b NEW-BRANCH-NAME`` 174 | - Creates a new branch using given name and then switches to that branch 175 | * - ``git status`` 176 | - Reports the current state of the repo. Make sure to run this at the top level of your repository 177 | * - ``git add .`` 178 | - Stages (adds) files to be committed. Changes have to be staged before they can be committed 179 | * - ``git commit -m "short description of changes"`` 180 | - Creates a commit that contains all the staged changes. 181 | * - ``git push`` 182 | - Pushes local commits to the remote repository. Then the commits can be pulled down by other team members 183 | * - ``git fetch`` 184 | - Makes your local repository aware of new branches and commits on the remote repository. Does NOT update any local branches, only makes your local aware of new commits. 185 | * - ``git merge BRANCH-NAME`` 186 | - Merges the commits from BRANCH-NAME into your current branch 187 | * - ``git pull`` 188 | - Runs a ``git fetch`` and ``git merge`` 189 | * - ``git stash`` 190 | - A way of keeping changes without committing them to your branch. 191 | * - ``git log`` 192 | - See a list of commits with info about the author, date, and time of each commit 193 | * - ``git diff OPTION`` 194 | - Will show differences in files between two branches or commits. 195 | 196 | 197 | Additional Resources 198 | -------------------- 199 | * `Official Git Reference `_ - A Git command reference from the creators of Git. 200 | * `Pro Git Book `_ - A reference book covering Git in depth. 201 | * `Flight Rules for Git `_ - A "How to" guide for Git. 202 | * `Interactive GitHub Sandbox `_ - A place to practice Git without fear of messing anything up. 203 | * `Connecting to GitHub with SSH `_ 204 | -------------------------------------------------------------------------------- /src/modules/git/git-setup.rst: -------------------------------------------------------------------------------- 1 | Group Project Git Setup 2 | ======================= 3 | 4 | Guide for setting up the repository for the group projects. 5 | 6 | 7 | LaunchCode Creates Repository 8 | ----------------------------- 9 | The class manager should create a new repository for each group. Don't worry about 10 | the repository name, because the group mentor or students can change that later to 11 | be more relevant to the project topic. 12 | 13 | The new repository should be added to the 14 | `LaunchCode Liftoff Projects organization `_. 15 | 16 | 17 | Group Mentor as Repository Admin 18 | -------------------------------- 19 | The class manager should add the group mentor as an admin to the group repository. 20 | 21 | 1. Go to settings for the new group repository 22 | 2. Go to Collaborators & Teams section 23 | 3. Look up the group mentor in the search box 24 | 4. Add the mentor as an *Admin* 25 | 26 | 27 | Group Mentor Adds Students to Repository 28 | ---------------------------------------- 29 | It's the group mentor's responsibility to add students to the group repository. Students 30 | should be given *Write* access to the repository. 31 | 32 | Students Clone Repository 33 | ------------------------- 34 | After being added to the repository, the students can clone the repository to their computer. 35 | -------------------------------------------------------------------------------- /src/modules/git/git-workflow.rst: -------------------------------------------------------------------------------- 1 | .. _git-workflow: 2 | 3 | Group Project Git Workflow 4 | ========================== 5 | 6 | This guide is for mentors and students in Liftoff. Using this Git workflow will allow for easier and more productive collaboration. 7 | 8 | 9 | What is a Git Workflow? 10 | ----------------------- 11 | A Git workflow is a strategy for using Git. Git is a powerful tool that can be used in many ways. 12 | Having a common strategy for using Git makes it easier and more efficient for teams to collaborate. 13 | There are many Git workflows that can be adopted by a team. For this course, we suggest the 14 | **feature branch workflow**. Read about `other Git workflows `_. 15 | 16 | 17 | Feature Branch Workflow 18 | ----------------------- 19 | The feature branch workflow is focused on keeping work on different features in separate feature branches. 20 | Those features branches are then merged into a master branch. 21 | 22 | Master Branch 23 | ^^^^^^^^^^^^^ 24 | Before discussing how to create feature branches, let's discuss the master branch. The master branch 25 | will be the branch that your feature branches will be created from. 26 | 27 | Master branch facts 28 | 29 | * The master branch is the main branch for your repository and project. 30 | * The master branch should contain code that is working and ready to be released. 31 | 32 | * Don't merge broken code into master! 33 | 34 | * Code should be tested and reviewed before being merged into master. 35 | * Avoid committing directly to the master branch. 36 | 37 | .. note:: 38 | 39 | Avoid committing directly to master. Instead, create a feature branch and merge the branch 40 | into master using a pull request. Pull requests will be discussed soon. 41 | 42 | What is a Feature? 43 | ^^^^^^^^^^^^^^^^^^ 44 | A **feature** is a requirement or related set of 45 | requirements that add value to a project. Before you can start coding, your team will need to 46 | create a list of features. Sometimes these features are called stories or even 47 | cards if you are using a tool such as Trello. Each feature should be as small as possible, while 48 | still adding value to the project. 49 | 50 | Example Features 51 | 52 | * Adding a login page 53 | * Fix change password bug 54 | * Make the user list sortable 55 | 56 | Feature Branch 57 | ^^^^^^^^^^^^^^ 58 | When you go to work on a feature, you will need to create a branch specifically for that feature. 59 | Most of the time you will branch off of the master branch. 60 | 61 | 62 | .. admonition:: Example 63 | 64 | In this example we want to create a feature branch for the "Fix change password bug" feature. 65 | 66 | 1. Make sure you are on the correct base branch before creating the new feature branch. 67 | 2. Pull to make sure that the base branch is up to date. 68 | 69 | :: 70 | 71 | git checkout master 72 | git pull 73 | 74 | 3. Create a new branch with a meaningful name. 75 | 76 | * ``git checkout -b branch-name`` creates and then switches to the new branch 77 | 78 | :: 79 | 80 | git checkout -b fix-change-password-bug 81 | 82 | 4. Check your status to make sure you are on the right branch. 83 | 84 | :: 85 | 86 | git status 87 | 88 | **Console Output** 89 | 90 | :: 91 | 92 | On branch fix-change-password-bug 93 | nothing to commit, working tree clean 94 | 95 | Making Commits 96 | ^^^^^^^^^^^^^^ 97 | You will write code and make commits to implement the feature. Make a commit when you have made 98 | progress towards the feature. Don't commit every time you add a line of code. Don't wait too long 99 | to commit or you will forget what you have done. 100 | 101 | Push Your Work to Origin 102 | ^^^^^^^^^^^^^^^^^^^^^^^^ 103 | After making commits to your feature branch, you will need to push them to origin. This will 104 | make sure they are backed up in case something bad happens to your computer and it will make 105 | the branch visible on origin. 106 | 107 | 108 | Pull Requests 109 | ------------- 110 | A pull request (PR) represents the process of merging (or pulling) a feature branch into master. 111 | A pull request is created and managed on your repository page on GitHub. Pull requests 112 | provide a user interface for reviewing files that were changed, approving the changes, and finally 113 | merging those changes into the master branch. 114 | 115 | .. note:: 116 | 117 | Pull requests can be created to merge a branch into any other branch. For the majority 118 | of this project, your pull requests will merge a feature branch into the master branch. 119 | 120 | 121 | How to Create a Pull Request 122 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 123 | You can create a PR anytime after you have pushed your feature branch to origin. You can wait 124 | until you are done coding and you have verified that the feature works. 125 | 126 | .. admonition:: Example 127 | 128 | This example creates a pull request for the ``add-login-page`` feature branch. 129 | 130 | 1. Your feature branch must exist on origin. 131 | 2. Go to the list of branches for your repository. 132 | 3. Click on the New pull request button for the feature branch. 133 | 134 | .. figure:: figures/create-pr-from-branch.png 135 | :alt: List of branches on GitHub showing New pull request button. 136 | 137 | New pull request button showing for feature branch. 138 | 139 | 4. Change the pull request name to a meaningful name, usually the feature name works best. 140 | 141 | * You can also add notes in the description. 142 | * The notes section is a good place to tell people what to look out for when testing. 143 | * You can also give reviewers hints about new libraries or code you added. 144 | * Finally adding a link to the Trello card, or other documentation, can also help the reviewer know what the feature is supposed to do. 145 | 146 | 5. Notice that ``master`` is shown as the base branch and that the ``add-login-page`` branch will be merged into it. 147 | 148 | .. figure:: figures/create-pr-form.png 149 | :alt: Create pull request form with branches highlighted. 150 | 151 | Create pull request form with branches highlighted. 152 | 153 | 6. Click the Create pull request button. 154 | 155 | * Your URL will be changed to a unique address for the new PR. https://github.com/LaunchCodeEducation/example-pull-request/pull/1 156 | * You can share this with teammates. 157 | * You can also see open PRs by going to the list of pull requests for your repository on GitHub. 158 | 159 | After these steps, you will have an open pull request. An open pull request can be merged or closed. Closing 160 | will cancel the pull request. Merging will merge the feature branch into master. Before merging, the code 161 | needs to be reviewed. 162 | 163 | Requesting a Review 164 | ^^^^^^^^^^^^^^^^^^^ 165 | After creating a pull request, you need to assign a reviewer. Pull requests provide an organized way to 166 | see what files were edited, added, and removed. You can even compare the changes to what was previously 167 | there. This allows a reviewer to see what was changed and if it meets team and language programming standards. 168 | 169 | .. admonition:: Example 170 | 171 | Assign code reviewer for Add login page pull request. 172 | 173 | 1. Go to the pull request on GitHub 174 | 2. Click the gear in the Assignees section 175 | 176 | * There is also a Reviewer section. The main difference is that the Assignee has been officially assigned to review this PR. 177 | 178 | 3. Find and click on a team member that you want to assign to review the PR. 179 | 180 | * You can assign multiple people, but you only need one. 181 | * The assignee will be notified by GitHub, but it's also a good idea to remind them directly that they need to review the PR. 182 | 183 | .. figure:: figures/assign-pr.png 184 | :alt: Pull request with assignee selected. 185 | 186 | Pull request with assignee selected. 187 | 188 | 189 | Reviewing a Pull Request 190 | ------------------------ 191 | A pull request should not be merged unless it has been reviewed and approved by a teammate. 192 | 193 | Benefits of code reviews: 194 | 195 | * Knowledge sharing between teammates 196 | 197 | * Technical knowledge and business knowledge is shared by having someone other than the original developer look at the code. 198 | 199 | * Best practices enforced 200 | 201 | * Team coding best practices are shared and reinforced. 202 | 203 | * Code confidence 204 | 205 | * The team has more confidence in the code, because more than one person has looked at it. 206 | 207 | How to Review Code 208 | ^^^^^^^^^^^^^^^^^^ 209 | When reviewing code, don't be picky just to be picky. Only provide feedback if you have a question, 210 | or you feel strongly that the there is an issue with the code. Code reviews can be a place 211 | to have a conversation about a requirement or the code itself. The comments will stay on the PR 212 | and could serve as documentation in the future. 213 | 214 | Focus on these topics when reviewing code: 215 | 216 | * Language conventions 217 | 218 | * Variable, function, and class names meet the language standards. 219 | 220 | * Security concerns 221 | 222 | * Don't commit passwords to GitHub! 223 | * Don't use risky third party code that hasn't been verified. 224 | * Look out for SQL injection attacks. 225 | 226 | * Non ideal code 227 | 228 | * Repeated code that could be turned into a function. 229 | * Unnecessary complexity, maybe a class was created that isn't needed. 230 | 231 | * Does the code work? 232 | 233 | * Test out the feature to see if it works. 234 | * Are there unit tests? If so are they passing? 235 | 236 | .. admonition:: Example 237 | 238 | In this example we will review and eventually approve the "Add login page" PR. 239 | 240 | 1. Go to the pull request on GitHub 241 | 2. Go to the "Files changed" tab 242 | 243 | * This tab lists all files that were edited, added, or removed. 244 | * Each file is listed and the changes have been color coded. 245 | * Red lines have been removed. 246 | * Green lines have been added or edited. 247 | 248 | 3. To add a comment, hover over a line of code and click the blue plus icon. 249 | 250 | * This will open a comment editor 251 | * Type in the note about the line of code 252 | 253 | 4. Then click the green button to add the comment 254 | 255 | * This button will say "Start a review" or "Add a review comment" 256 | 257 | .. figure:: figures/add-comment.png 258 | :alt: Comment added to pull request. 259 | 260 | Comment added to pull request. 261 | 262 | 5. Next the programmer that created the PR needs to address the issue. 263 | 6. The programmer updates the code and pushes a new commit to the feature branch. 264 | 265 | * As soon as the push happens, the new commit appears on the pull request page. 266 | 267 | 7. The "Conversation Tab" is where you can reply to previous comments. 268 | 8. Notice the reply comment that says the issue has been fixed. 269 | 270 | .. figure:: figures/reply-after-fixing-code.png 271 | :alt: Conversation tab showing comment and reply. 272 | 273 | Conversation tab showing comment and reply. 274 | 275 | 9. Finally the pull request can be approved. 276 | 277 | * Since that is the only issue the reviewer found, the pull request can be approved. 278 | * This will mark the pull request as approved. 279 | * You can also mark a pull request as "Request Changes" 280 | 281 | * This is done when the reviewer wants to indicate that some issues need to be addressed before they are willing to give their approval. 282 | 283 | 10. Approving is done by clicking on "Review Changes" on the "Files Changed" tab. 284 | 285 | * You can provide a message when approving or requesting changes. 286 | * You can also simply add comments without changing the status of the pull request. 287 | 288 | .. figure:: figures/approve-changes.png 289 | :alt: Review changes form. 290 | 291 | Review changes form. 292 | 293 | Merging Into Master 294 | ------------------- 295 | After a pull request has been approved by a reviewer, it can be merged. Normally the 296 | developer or person that opened the PR should click the big green merge button. However, 297 | anyone on the project can click merge if needed. 298 | 299 | .. admonition:: Example 300 | 301 | Let's merge ``add-login-page`` into master by clicking the merge button. 302 | 303 | 1. Click the green merge button shown on the conversation tab. 304 | 305 | .. figure:: figures/merge-button.png 306 | :alt: Merge button. 307 | 308 | Merge button. 309 | 310 | 2. Click the green confirm button 311 | 312 | .. figure:: figures/confirm-merge-button.png 313 | :alt: Confirm button. 314 | 315 | Confirm button. 316 | 317 | 3. Click the grey delete branch button 318 | 319 | * The branch is no longer needed because all of it's commits are now merged into master. 320 | 321 | .. figure:: figures/delete-branch.png 322 | :alt: Delete branch button. 323 | 324 | Delete branch button. 325 | 326 | 4. Tell your teammates that master has been updated and that they should update their local master branches. 327 | 328 | * Now celebrate! You merged code into master! 329 | 330 | .. warning:: 331 | 332 | Sometimes the merge button is NOT clickable because there are conflicts that can not be 333 | resolved automatically. This happens when you need to update the feature branch with commits 334 | that are in master. These are usually very basic conflicts to fix, so don't be scared. 335 | 336 | How to update feature branch with master: 337 | 338 | 1. Checkout the master branch ``git checkout master``. 339 | 2. Git pull to update master ``git pull``. 340 | 3. Checkout the feature branch ``git checkout add-login-page``. 341 | 4. Merge master into the feature branch ``git merge master``. 342 | 5. Resolve conflicts. 343 | 6. Commit and push to origin. 344 | 345 | 346 | Additional Resources 347 | -------------------- 348 | * `Atlassian article comparing Git workflows `_ 349 | * `GitHub pull request reference `_ 350 | -------------------------------------------------------------------------------- /src/modules/git/github-issues.rst: -------------------------------------------------------------------------------- 1 | .. _github-issues: 2 | 3 | GitHub Issues 4 | ============= 5 | 6 | Standard GitHub Repository 7 | -------------------------- 8 | 9 | In order to receive feedback from your mentor you will need to enable 10 | GitHub Issues. GitHub Issues is usually setup automatically for new 11 | repositories. 12 | 13 | Here is a picture of an example GitHub Project Repo. 14 | 15 | .. figure:: figures//github_issues_1.png 16 | :alt: Example GitHub Project Repo 17 | 18 | Example GitHub Project Repo 19 | 20 | The tabs for this project are Code, Issues, Pull requests, Projects, 21 | Wiki, Insights, and Settings. 22 | 23 | If I click the Issues tab it looks like this. 24 | 25 | .. figure:: figures//github_issues_2.png 26 | :alt: Example GitHub Project Issues 27 | 28 | Example GitHub Project Issues 29 | 30 | My issues are already enabled! I can create a new issue by clicking the 31 | large green New Issue button. 32 | 33 | Enabling GitHub Issues 34 | ---------------------- 35 | 36 | Let's look at the same repository after I have turned off Issues in the 37 | settings tab. 38 | 39 | .. figure:: figures//github_issues_3.png 40 | :alt: Example GitHub Project Repo 41 | 42 | Example GitHub Project Repo 43 | 44 | You can see that the Issues tab is no longer present! 45 | 46 | In order to turn this on I must select the Settings tab. 47 | 48 | .. figure:: figures//github_issues_4.png 49 | :alt: Example GitHub Project Settings 50 | 51 | Example GitHub Project Settings 52 | 53 | The settings page has a ton of configurable options, you should look 54 | around and see what is possbile! On the Main page shown above you can 55 | see the big Features heading in that heading are 4 checkboxes, and the 56 | Issues checkbox is unchecked. By clicking that checkbox, it will enable 57 | the Issues tab. 58 | 59 | .. figure:: figures//github_issues_5.png 60 | :alt: Example GitHub Project Issues Settings 61 | 62 | Example GitHub Project Issues Settings 63 | 64 | When I check the Issues button it automatically takes effect, and you 65 | can see from the image above that it adds the Issues tab back in for me! 66 | -------------------------------------------------------------------------------- /src/modules/index.rst: -------------------------------------------------------------------------------- 1 | .. _modules-index: 2 | 3 | Liftoff 4 | ======= 5 | 6 | Modules 7 | ^^^^^^^ 8 | 9 | Introduction 10 | ------------ 11 | 12 | .. toctree:: 13 | :maxdepth: 1 14 | 15 | intro/liftoff-overview 16 | intro/setup 17 | 18 | Project Modules 19 | --------------- 20 | 21 | .. toctree:: 22 | :maxdepth: 1 23 | 24 | project/user-stories 25 | project/wireframes 26 | project/git 27 | project/licensing 28 | project/deploying-java-apps 29 | project/logging-java-apps 30 | demo-projects/index 31 | 32 | Career Modules 33 | -------------- 34 | 35 | .. toctree:: 36 | :maxdepth: 1 37 | 38 | career/online-profiles 39 | career/live-coding 40 | career/interviewing 41 | career/tech-interview 42 | 43 | Assignments 44 | ----------- 45 | 46 | .. toctree:: 47 | :maxdepth: 1 48 | :glob: 49 | 50 | assignments/project-outline 51 | assignments/project-planning 52 | assignments/project-setup 53 | assignments/online-profiles 54 | assignments/project-review 55 | assignments/live-coding 56 | assignments/mock-interview 57 | assignments/project-presentation 58 | assignments/deployment 59 | 60 | Git 61 | --- 62 | 63 | .. toctree:: 64 | :maxdepth: 1 65 | 66 | git/git-setup 67 | git/git-refresher 68 | git/github-issues 69 | git/git-workflow 70 | git/git-commits 71 | 72 | -------------------------------------------------------------------------------- /src/modules/intro/liftoff-overview.rst: -------------------------------------------------------------------------------- 1 | .. _liftoff-overview: 2 | 3 | Liftoff Overview 4 | ================ 5 | 6 | Liftoff is an 8 week class with two objectives: 7 | 8 | #. Complete a significant amount of work towards a project. 9 | #. Be prepared for the job interview process. 10 | 11 | Class time will be similar to LC101. You will complete prep work before each 12 | class. During class there will be a lecture or discussion, and small-group 13 | activities. You will be required to work on assignments 14 | outside of class, including working on your project. 15 | 16 | This class varies from LC101 in that you will be required to 17 | perform a lot of *independent* work on your project. No one is going to tell 18 | you what to build and you will not be given a list of requirements. It will 19 | be up to you to make many decisions as you build your project. 20 | We will support and guide you along the way, but ultimately the success of your project rests on you. 21 | 22 | Liftoff Expectations 23 | -------------------- 24 | 25 | - Class attendance and participation 26 | - Completion of all assignments 27 | - Visible progress on your project every week 28 | 29 | Making a project, especially your first independent project, can be a 30 | daunting task. You will have to work on your project multiple times a 31 | week outside of class, in addition to the prep work and assignments. We 32 | estimate that you will need to work at least **20 hours each week** to 33 | make it through this course successfully. 34 | 35 | Project Overview 36 | ---------------- 37 | 38 | The capstone project is one of the most important pieces of landing the 39 | perfect LaunchCode apprenticeship. Your project is one of the primary 40 | ways that LaunchCode and potential employers will verify that you are 41 | job-ready, and it should be something that you're proud to show off. So 42 | don't skimp on the time, energy, and thought that you put into this! 43 | 44 | Be unique, innovative and creative. Your project should demonstrate 45 | meaningful thought and planning, and that you can build software from 46 | the ground up. 47 | 48 | Your project should: 49 | 50 | #. **Demonstrate marketable skills**: You have a strong foundation in at 51 | least one language that is widely used by professional developers, 52 | and the related tools and best practices. You can apply your 53 | programming skills within a professional-grade framework or tools 54 | like ASP.NET MVC or Spring Boot. 55 | #. **Demonstrate your ability to learn new things**: In your project, 56 | you will go beyond your initial learning to teach yourself something 57 | new. Maybe you learned Angular.js for your front-end web project, or 58 | connected to an API in your back-end Java application. 59 | #. **Solve a problem**: When employed as a programmer, you'll be asked 60 | to implement solutions to problems. Your capstone project should 61 | demonstrate that you are capable of identifying a problem and coming 62 | up with a software-based solution to the problem. For example, 63 | creating an app that allows a nonprofit to organize and communicate 64 | with volunteers solves a meaningful problem. Creating a Sudoku app 65 | doesn't. 66 | 67 | You will put your project up in GitHub. This will make it accessible for 68 | others to view, and will show off all of the hard work you put into it 69 | as you rack up commits! 70 | 71 | Regardless of the project you tackle, you should: 72 | 73 | * **Build an application entirely yourself**, or nearly so. If you use starter code, you need to go well beyond what was provided or worked on by others. You should be able to clearly articulate what you built yourself versus what was built by others. 74 | * **Include 3-5 significant features.** Each feature should add a new component to your project but not be so small as to be trivial. It's difficult to define what a significant feature is, but we'll help you understand as you go. Adding a new button to your web project? Probably not significant enough. Creating a discussion forum? That's too big. Adding user authentication? Yep, that's great! 75 | 76 | .. tip:: 77 | 78 | To give you an idea of what a good project idea looks like, check out our :ref:`demo-projects`, as well as `project demo videos made by previous students `__ 79 | -------------------------------------------------------------------------------- /src/modules/intro/setup.rst: -------------------------------------------------------------------------------- 1 | .. _setup: 2 | 3 | Getting Ready 4 | ============= 5 | 6 | Assignment Repository 7 | --------------------- 8 | 9 | Set up the repository that you will use to submit most assignments for 10 | this course by following the directions in the `main 11 | README `__ 12 | of the ``LaunchCodeEducation/liftoff-assignments`` repo. 13 | 14 | Trello 15 | ------ 16 | 17 | Create a free `Trello `_ account. Trello is a project management tool. You will use it to document and organize tasks while working on your project. 18 | 19 | After creating your account, create a new board for your project. A single board typically contains all of the information and tasks for a specific project. On your new board, create 3 lists. From left to right, name these: 20 | 21 | - Next 22 | - In Progress 23 | - Done 24 | 25 | Git Refresher 26 | ------------- 27 | 28 | You will be using Git extensively throughout this course. Read our :ref:`git-refresher`, and if you plan on working on a group project, also read the :ref:`git-workflow`. 29 | -------------------------------------------------------------------------------- /src/modules/project/figures/sql-export.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaunchCodeEducation/liftoff/519c50ff24cfd5c018ab007c3f955712f7d41943/src/modules/project/figures/sql-export.png -------------------------------------------------------------------------------- /src/modules/project/git.rst: -------------------------------------------------------------------------------- 1 | .. _git-for-projects: 2 | 3 | Git for Projects 4 | ================ 5 | 6 | You've become comfortable using Git for version control on your 7 | projects and assignments. However, you likely haven't used the same Git 8 | repository to collaborate with others. It should come as no surprise to 9 | you that in the professional tech world, developers are working in the 10 | same code base all the time! 11 | 12 | Aside from tracking your changes to a project, Git also enables 13 | efficient collaboration with others. This means that there are 14 | mechanisms for combining different groups of changes (*merging*), for 15 | sharing code remotely (*using remote repositories*), and for carrying 16 | out different sets of tasks within the same repository (*branching*). 17 | We'll learn about these in more detail. 18 | 19 | - `Read "Branching and Merging" `_ 20 | - `Read "About Remote Repositories" `_ 21 | - :ref:`Read "Regular Git Commits" ` 22 | -------------------------------------------------------------------------------- /src/modules/project/licensing.rst: -------------------------------------------------------------------------------- 1 | .. _licensing: 2 | 3 | Licensing 4 | ========= 5 | 6 | As a software developer, almost anything you create is your own 7 | **intellectual property**. This means that you own it and thus have 8 | control over whether or not others can use it. Similarly, when you use 9 | software or code written by other people, you are only doing so with 10 | their permission. Licenses are legal tools used to specify who can use 11 | software, and how. As a developer, it is critically important that you 12 | are aware of licenses and that you follow them properly when using code 13 | written by others. 14 | 15 | While your first instinct may be to prevent others from using your work, 16 | that is often not the best choice. Many software developers and 17 | companies choose to allow others to use their code, which is great! 18 | Think about some of the tools, libraries, and frameworks that you've 19 | used throughout your learning. Most, if not all, of these were used 20 | legally via **open source licenses**. Such licenses ensure that 21 | developers can share and use code appropriately, making the world of 22 | development a better place for everyone! 23 | 24 | - Read `The Legal Side of Open Source `_. Read sections 1-4. If you're interested, continue through the end of the article. 25 | - Browse `choosealicense.com `_. This site is great tool than can help you determine which license to apply to your project based on how you want to allow others to use it. Have a look and read about some of the licenses that it recommends for various purposes. 26 | -------------------------------------------------------------------------------- /src/modules/project/logging-java-apps.rst: -------------------------------------------------------------------------------- 1 | .. _java-logging: 2 | 3 | Logging With Java Applications 4 | ============================== 5 | 6 | In this tutorial, we'll discuss why logging is important, how to control 7 | your logging output, how to write your own logging statements, and how 8 | to view your logs in production. 9 | 10 | .. contents:: Contents 11 | :depth: 3 12 | 13 | Introduction 14 | ------------ 15 | 16 | Requirements 17 | ^^^^^^^^^^^^ 18 | 19 | This tutorial assumes you have the following installed: 20 | 21 | - `Spring Boot `__ 22 | - `Java 8 `__ 23 | - `Gradle `__ 24 | 25 | Why Logging Matters 26 | ^^^^^^^^^^^^^^^^^^^ 27 | 28 | - Logging provides observability of your app in a live environment. What went wrong? What does the stack trace of an error experienced in production look like? 29 | - Logging allows you to debug errors. 30 | - Using a logging framework provides a consistent, informative, timestamped output, and handles the formatting and display of stack traces. If you've used ``System.out.println`` to output information, you've noticed that these messages lack that extra context that the other messages have. 31 | 32 | Considerations 33 | ^^^^^^^^^^^^^^ 34 | 35 | - Don't log sensitive information, such as passwords, PII (personally identifiable information), or credit card numbers. 36 | - Too much logging is hard to sort through. Too little logging won't provide insight into critical issues. We'll talk about a few techniques to manage the *signal to noise* ratio inherent in getting this right. 37 | 38 | Setup 39 | ----- 40 | 41 | Spring Boot by default ships with all the necessary libraries to add 42 | additional logging to your application. You will be interacting with 43 | `SLF4J `__, a logging abstraction which 44 | simplifies logger use. Under the hood, the logging implementation is 45 | provided by `Logback `__. 46 | 47 | This tutorial will be based off of the 48 | `coding-events `__ 49 | project. Clone this project and check out the ``auth-filter`` 50 | branch. Create a new branch from here called ``logging`` (``git checkout -b logging`` 51 | from the ``auth-filter`` branch). If you'd like to keep the 52 | changes we'll be making, first fork the project to your own GitHub 53 | account. 54 | 55 | Feel free to use your own project for this tutorial, just make sure you 56 | update class and package names where relevant. 57 | 58 | Reading Log Messages 59 | -------------------- 60 | 61 | You likely already have some experience reading log messages, but let's 62 | examine a typical event logged by Spring. 63 | 64 | Here's the first log message that displays immediately under the Spring 65 | Boot banner on startup: 66 | 67 | ``2017-11-05 13:33:58.594 INFO 73394 --- [ restartedMain] org.launchcode.CodingEventsApplication : Starting CodingEventsApplication on LaunchCodeComputer with PID 73394 (/Users/launchcoder/workspace/coding-events/build/classes/main started by launchcoder in /Users/launchcoder/workspace/coding-events)`` 68 | 69 | Here's what's displayed by default: 70 | 71 | - Date and Timestamp 72 | - Log Level — ERROR, WARN, INFO, DEBUG or TRACE (discussed next) 73 | - Process ID 74 | - Thread name — Enclosed in square brackets (may be truncated for 75 | console output). 76 | - Logger name — This is usually the source class name (often 77 | abbreviated). 78 | - The log message - Here Spring is telling us what process ID our 79 | application started on, where it was started from, and by whom. 80 | 81 | Controlling Logging Output 82 | -------------------------- 83 | 84 | Loggers typically support five different log levels, or degrees of 85 | severity, ranging from most severe (``ERROR``) to least severe 86 | (``TRACE``). As a developer, this provides context for the message (How 87 | serious is the issue?), and enables control over which messages are 88 | displayed during runtime. 89 | 90 | The five standard log levels, in order of increasing severity, are: 91 | 92 | - ``TRACE`` 93 | - ``DEBUG`` 94 | - ``INFO`` 95 | - ``WARN`` 96 | - ``ERROR`` 97 | 98 | Each message that is potentially logged by an application has a level, 99 | and a running application has a level configured as well. The 100 | application log level controls which messages are actually logged, with 101 | all messages at the applications log level or higher being logged. For 102 | example, if the application level is set to ``INFO``, then ``INFO``, 103 | ``WARN``, and ``ERROR`` messages are displayed. If the application level 104 | is ``ERROR``, then only messages with that level are displayed. If the 105 | application level is ``TRACE``, then all messages are displayed in the 106 | logs. 107 | 108 | Logging levels allow you to control what information an application 109 | logs. You may want to only log ``INFO`` and above when your application 110 | is working normally, but you may want to enable ``DEBUG``-level logs in 111 | order to troubleshoot a problem without redeploying your code. Logging 112 | frameworks allow you to control the log level via configuration files 113 | and properties. 114 | 115 | In Spring Boot projects, you can use the ``application.properties`` file 116 | to control log levels. Spring allows log levels to be set not just for 117 | the application as a whole, but also separately for individual packages. 118 | This allows different packages to have different levels. This feature 119 | can help you focus in on only the most important messages. For example, 120 | if you are debugging a problem and know precisely which package the 121 | issue lies in, you can reduce the number of messages that you have to 122 | wade through by enabling more verbose logging for just that package. 123 | 124 | Within ``application.properties``, all properties are prepended with 125 | ``logging.level``, followed by the package name and a log level. Spring 126 | scans the file for such properties on application startup. 127 | 128 | For example, if you want to log every event at a specific level, use: 129 | 130 | :: 131 | 132 | logging.level.root=DEBUG 133 | 134 | If you want to log everything that Spring is doing, you'll set: 135 | 136 | :: 137 | 138 | logging.level.org.springframework=TRACE 139 | 140 | Notice that we're setting the log level here only for the package 141 | ``org.springframework``. Any ``DEBUG`` message emitted by a class at or 142 | below this package/directory will be displayed. 143 | 144 | Say you want to log everything in your app, but ignore informational 145 | messages from Spring. You would set the following properties: 146 | 147 | :: 148 | 149 | logging.level.org.springframework=WARN 150 | logging.level.org.launchcode=TRACE 151 | 152 | Here are some more common packages that may be useful to log during 153 | debugging: 154 | 155 | :: 156 | 157 | # For debugging security 158 | logging.level.org.springframework.security=DEBUG 159 | 160 | # General debugging of web applications without getting ALL of Spring's logs 161 | logging.level.org.springframework.web=DEBUG 162 | 163 | # Database/ORM logging. Best used in conjunction: 164 | logging.level.org.hibernate.SQL=DEBUG 165 | logging.level.org.hibernate.type=TRACE 166 | 167 | # Consuming REST apis via RestTemplate: 168 | logging.level.org.springframework.web.client.RestTemplate = DEBUG 169 | logging.level.org.apache.http = DEBUG 170 | 171 | .. note:: 172 | 173 | Some loggers also provide a ``FATAL`` level, but Logback treats this the same as an ``ERROR``. 174 | 175 | 176 | Adding a Logger 177 | --------------- 178 | 179 | As you start to build more complex applications and host them in a live 180 | environment, you'll want to start adding your own logging messages. 181 | 182 | To do so, you'll need to instantiate (create) a logger inside the class 183 | we want to do some logging in. This is done by adding the following to 184 | the top of your class, inside of your class declaration. 185 | 186 | .. code:: java 187 | 188 | private static final Logger logger = LoggerFactory.getLogger(EventController.class); 189 | 190 | Here, we're adding a logger to our ``EventController``, but if you're 191 | working on your own project, be sure to use the appropriate class name. 192 | 193 | This gives us access to a logging instance, which we can start using to 194 | create log messages. 195 | 196 | Creating a log statement 197 | ------------------------ 198 | 199 | Consider a situation where you might want to log why a user failed 200 | validation. This way, if the user contacts us confused as to why they 201 | can't create a new event, register, or otherwise use our application, 202 | we'll have a record of what was the root problem. Add the following line 203 | inside one of our validation blocks, like so: 204 | 205 | .. code:: java 206 | 207 | if (errors.hasErrors()) { 208 | logger.info("Error during event registration: " + errors.getAllErrors().toString()); 209 | model.addAttribute("title", "Add Event"); 210 | return "events/create"; 211 | } 212 | 213 | In the event that a user has provided incorrect information when adding 214 | an event, we will log that there was an error, as well as the errors 215 | themselves, which should give us insight into what was the root of the 216 | problem. 217 | 218 | Passing Objects 219 | --------------- 220 | 221 | Here we are just logging a string which we concatenate with the ``+`` 222 | symbol. Each logger provides many overloaded methods allowing you to 223 | pass in additional parameters, such as an object or an exception. Any 224 | objects that are passed in will be logged via their ``toString`` method. 225 | If it's an object you've created, make sure you've overridden the 226 | default ``toString`` and you aren't logging any sensitive information 227 | stored in your object. 228 | 229 | Reading Logs in Cloud Foundry 230 | ----------------------------- 231 | 232 | If you've deployed your app via Cloud Foundry, you can view your logs by 233 | using the ``cf logs`` command. For example, if your app was named 234 | ``coding-events`` you'd type ``cf logs coding-events``. This will display your 235 | logs in real time. If you want to view recent logs, add the ``--recent`` 236 | flag like so, ``cf logs coding-events --recent``, and the most recent logs 237 | will be displayed. 238 | 239 | Reading Logs in Pivotal Web Services 240 | ------------------------------------ 241 | 242 | If you've hosted your app using Pivotal Web Services, you can also view 243 | your logs by logging into your `PWS 244 | console `__. Navigate to your space and then your 245 | application. There should be a tab for *Logs*. From there, you can 246 | view old logs, as well as monitor them in real time. 247 | 248 | Additional Resources 249 | -------------------- 250 | 251 | - `Spring Boot Docs - Logging Features `__ 252 | - `Spring Boot Docs - Logging How To `__ 253 | - `Cloud Foundry Logging `__ 254 | -------------------------------------------------------------------------------- /src/modules/project/user-stories.rst: -------------------------------------------------------------------------------- 1 | .. _user-stories: 2 | 3 | User Stories 4 | ============ 5 | 6 | Any large project must be broken down into smaller tasks. This is particularly true for software projects. Furthermore, *how* we break down and define smaller tasks has a large impact on how successful we are in creating good, useful software. 7 | 8 | .. index:: user story ! 9 | 10 | A **user story** is a concise, well-defined description of the *outcome* of a task. It specifices the *who*, *what*, and *why* of a given feature. 11 | 12 | Read the following articles about user stories: 13 | 14 | * `What Is a User Story? `_ 15 | * `An Introduction to User Story Mapping `_ 16 | * `10 Tips for Writing Good User Stories `_ 17 | -------------------------------------------------------------------------------- /src/modules/project/wireframes.rst: -------------------------------------------------------------------------------- 1 | .. _wireframes: 2 | 3 | Wireframes 4 | ========== 5 | 6 | User Experience (UX) 7 | -------------------- 8 | 9 | 10 | UX is short for **user experience** and is a design discipline placing 11 | primary importance on a person's interactions with the product or service offered. 12 | A critical part of the UX design process is wireframing, which is a technique 13 | used to roughly sketch out web pages and application views to focus on 14 | how elements are arranged and how users are likely to interact with them. 15 | 16 | This isn't a design class and most developers work with designers to 17 | create the best products possible. While you won't be expected to be an 18 | expert in UX and design, it is important to have an appreciation for the 19 | elements involved and think about the user when working on your project. 20 | 21 | - `Watch "Wireframing for UX" `_ 22 | - `Read "Getting Started With Wireframes `_ 23 | 24 | Minimum Viable Product (MVP) 25 | ---------------------------- 26 | 27 | MVP is short for **minimum viable product**, which is a product with just 28 | enough features to satisfy early customers and to provide direction for 29 | future product development. This should be your goal throughout Liftoff. 30 | You will not have a fully fleshed out project that is completely 31 | polished. What you will have is a great start, and the ability to 32 | continue working on your project. 33 | 34 | Last class, we talked a bit about what you should build for your personal 35 | project. In our next class, we will talk more about creating an MVP. 36 | 37 | - `Read "What is a Minimum Viable Product?" `_ 38 | 39 | From User Stories and Wireframes to Code 40 | ---------------------------------------- 41 | 42 | In order to be successful in Liftoff, you will be required to turn your 43 | ideas and skills into an actual project. This is a difficult task. In 44 | class, we will not be writing code but instead will focus on concepts that 45 | will help you work on your project. *You will be required to create your 46 | project outside of class!* 47 | 48 | There are no secrets or shortcuts to completing a project. It takes lots 49 | of time, hard work, and working through frustrating bugs. You should 50 | commit to working on your project as much as possible. One night a week 51 | will likely not be enough to finish your project. We believe one of the 52 | best ways to hold yourself accountable is by using user stories, 53 | wireframes, and having regular meetings with your mentor where you 54 | update them on what you have done. 55 | 56 | In class, we will talk about taking our user stories and wireframes and 57 | turning them into actual code. 58 | 59 | To get a head start, review the demo projects created by Chris and Paul. 60 | Pay attention to the user stories they wrote then look at their 61 | GitHub profiles to see the code they created. 62 | 63 | - :ref:`Event Log - Week 2 ` 64 | - :ref:`Expense Tracker - Week 2 ` 65 | 66 | -------------------------------------------------------------------------------- /src/todos.rst: -------------------------------------------------------------------------------- 1 | TODOs 2 | ===== 3 | 4 | .. todolist:: 5 | -------------------------------------------------------------------------------- /update-theme.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | pip install --upgrade git+https://github.com/LaunchCodeEducation/sphinx-bootstrap-theme.git@master --------------------------------------------------------------------------------