Introduction

Before we begin

The following is a path forward to set up your development laptop. It is not the path. Asking your fellow mojos will offer many alternatives.

Try it out. Experiment. Change what you don't like. Don't be afraid to invest time in your workflow.

Make sure you're connected to the following services before you begin:

  • Mojotech GSuite
  • Mojotech Slack
  • BambooHR (use gauth)
  • PivotalTracker (use gauth)
  • Zeplin (use gauth)

These examples assume osx. Linux users will have to use a different package manager and find the corresponding names for packages e.g. - apt install python3-pip. Linux users should skip the brew, iTerm2, and bash steps.

Brew (osx only)

Brew is package manager for mac osx. https://brew.sh/

xcode-select --install /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

iTerm2 (osx only)

Terminal replacement for mac os x. https://www.iterm2.com

brew install --cask iterm2

Bash (osx only)

The missing semester uses bash for its examples. A number of open source projects also assume bash for examples. If you have a preferred shell already, use that and disregard the bash related steps.

chsh -s /bin/bash

Opening iterm2 should now display the bash shell prompt. You can check that this is working correctly by entering this command:

echo $SHELL

It should return /bin/bash.

if you see a message that says The default interactive shell is now zsh., you can surpress it by adding this line to your ~/.bash_profile file:

export BASH_SILENCE_DEPRECATION_WARNING=1

Improved bash status line

The default statusline for bash is far from helpful. We can remedy that quickly by following a few simple steps.

Start by running this to install the starship statusline:

brew install starship

After that finishes, append the following to the end of your ~/.bash_profile (~/.bashrc on linux):

eval "$(starship init bash)"

If you're on linux or dont have access to brew, you can run this command

sh -c "$(curl -fsSL https://starship.rs/install.sh)"

other install methods can be found here You can run starship --help to get a quick overview of the statusline functionality or visit the website for more in-depth docs.

The final step to set up your new statusline is to get a font with support for icons, these are called NerdFonts, installing them is simple:

brew tap homebrew/cask-fonts brew install --cask font-blex-mono-nerd-font

if you are on linux or dont have access to brew, you can download the font directly here. Once downloaded, open the unzip the package, select all of the .otf files and double click them. This will launch the installation prompt.

Once you finish downloading and installing your NerdFont, use it by opening your iTerm preferences, going to the Profile section, and selecting the Text tab.

Relogging should present a new shell statusline for the current working directory and git status if you are in a git directory.

fzf

https://github.com/junegunn/fzf

fzf is a fuzzy file finder with shell integration (CTRL-T, CTRL-R, and ALT-C)

brew install fzf /usr/local/opt/fzf/install

The shell integration commands should present the fuzzy finder for:

  • files: CTRL-T
  • shell history: CTRL-R
  • cd directory: ALT-C

git

brew install git

Send your github handle to @craig (Craig Jolicoeur) on slack.

Set up your ssh key for authentication

ssh-keygen -t rsa -b 4096 cat ~/.ssh/id_rsa.pub | pbcopy

pbcopy will copy STDOUT into your clipboard. You can then paste into your account ssh key on github.com.

docker

https://hub.docker.com/editions/community/docker-ce-desktop-mac/

https://download.docker.com/mac/stable/Docker.dmg

  • Install the dmg image.
  • A Docker whale icon appears in the status menu. As soon as the whale icon appears, the symbolic links for docker, docker-compose, docker-credential-osxkeychain and docker-machine are created in /usr/local/bin.
  • Test docker
docker run hello-world

asdf

Version manager tool. Allows running multiple versions of language runtimes that can be controlled per project.

https://asdf-vm.com/#/core-manage-asdf-vm

brew install asdf

Restart your terminal.

asdf plugin add ruby asdf plugin add nodejs asdf plugin add yarn

You can also install the appropriate versions if the project has a .tool-versions file.

cd helios2 # or whether helios2 is checked out for you asdf install

If asdf install fails, you are likely missing some system dependencies. The asdf output will likely include instructions to install them like:

The Ruby readline extension was not compiled. ERROR: Ruby install aborted due to missing extensions Try running `apt-get install -y libreadline-dev` to fetch missing dependencies.

Useful Chrome Extensions

React Dev Tools

Inspect the react components in the browser similiar to the element inspector

https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi?hl=en

Apollo Client Developer Tools

Inspect and run graphql queries

https://chrome.google.com/webstore/detail/apollo-client-developer-t/jdkknkkbebbapilgoeccciglkfbmbnfm?hl=en-US

Editors

Common editors and recommended plugins

Visual Code

https://marketplace.visualstudio.com/items?itemName=rebornix.Ruby

https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint

https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode

https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare

Resources

Projects

Current

Save 58

Inspiration: Kurzgesagt – In a Nutshell: This Video Might Save 58 Lives Next Week

Hypothesis: Can an automated message (email, tweet, slack, video) save lives?

Premise: Can providing statistically likely causes for death or injury for a specific person's demographic (age, gender, profession) combined with current conditions (date, geography, weather) result in that person being mindful of the particular danger to save their life? Pros:

  • This is a deceptively hard problem involving multi dimensional. big data. It could easily keep intern teams occupied for several years
  • Decomposable. Its possible to focus this project into smaller, month long deliverables that are challenging.
  • Motivational mission. It feels good to do some good.
  • Potentially marketable as doing good

Cons:

  • Delicate topics for the work place. See the video.
  • Not profitable without turning people into the product.

Impact Map

Business Value

  • Data science tooling
    • iceburg
    • developing a model
  • Data/ETL
    • repeatable data scraping
    • automated data evaluation
  • New technologies
    • sveltekit
    • nix/flake
    • tauri
    • multi dimension database
    • automated web scrapping
    • biome

Next steps

  • Week 0
    1. Evaluate data
    2. Boot strap project
      • Repo
        • monorepo
        • think about directory structure for data, server, client
      • Tooling: direnv / nix flake <- Daniel or Kyle?
      • Typescript/Sveltekit
        • tooling/one off scripts can be polyglot
      • Linter/formatter - biome
      • Postgresql docker?
      • CI - github actions
      • README
    3. Management
      • Assign primary mentors
        • pick days in office
      • Laptops - MCD acting
      • github/slack access
    4. Impact map/Stories
      • Review notes
      • Need more challenges
  • Week 1
    • The missing semester
      • Review the first six chapters
      • Command-line Environment and Version Control (Git) will be really helpful
      • Ask lots of questions
    • link 4cs
    • Tool setup
      • Checkout github repo. Work through README
      • Ask fellow mojos! #internship #engineering
    • First commit?
    • Discovery
  • Week 2 - atomic commits / unraveling git commit
    • auth
    • Implement boilerplate design? Jesse has a headless UI library he likes
      • Anonymous user landing page
      • Authenticated user page
      • privacy policy
    • Scraping/Data collection
      • Aggregate data
      • Automate import into database
    • unit test / some web output for

      Week before day light savings time, "start shifting your schedule by 15 minutes earlier/later. heart attacks and car crashes increase after day light savings time due to sleep deprivation"

    • video parity
      • 3 million people will watch this video
        • 15-35
        • living in western countries
      • driving
        • 8 in car crash next week. 416 of you over the next year. 2m29s
          • 2: 30% from speeding
          • 2: 25% from drinking and driving
          • 1: from distracted
          • 3: from not wearing a seat belt
        • 26 by falling in the next year. 5m17s
          • scaffolding, ladders, hiking
        • 1 of you will drown next week. 6m07s
          • over estimate swimming abilities
          • go into the water drunk
          • cruise ships
        • 10 of you will die from self harm next week 7m12s
          • crisis situations triggered by traumatic events and extraordinary situations
          • resources for help
        • 5 of you will from cancer next week 8m52s
          • regular checkups and screenings
          • sunscreen
      • sharing
  • Week 3
    • Ticket work.
  • Week 4
    • Ticket work.
Shallow vs deep

Shallow is a first step to get something working. Deep is a thorough tech investigation

Shallow
  • Json / csv in git
  • Manual algorithm
  • Web app only
  • Manual notification trigger via web
  • Manual data scrapping
Deep
  • Apache iceburg for storage sharing. Data lake. <- Eric Gibb
  • Multi dimension data in postgresql / vector storage
  • Desktop/mobile version via Tauri
  • Worker queue for pre calculating and notifications. Different queue/worker than previous mojo work not redis/sidekiq/bullmq
  • Automated LLMs scrapping
Thoughts

We should have a very clear privacy policy

Landing on the page should engage the user with data driven from form. This can lead towards creating an account to provide more specific information on a schedule.

Dog Fooding. Plugging in "Software Engineer" + "Remote" + "No standing desk" = "make sure to walk around every hour"

Living in downtown Manhatten on a Sunday morning, "be careful slicing the bagel this morning. X% of ER visits from from bagel slices today"

Week before day light savings time, "start shifting your schedule by 15 minutes earlier/later. heart attacks and car crashes increase after day light savings time due to sleep deprivation"

Needs to be friendly and not anxiety inducing. Carson mentioned the Citizen app as the antithesis.

Wireframe

Landing

Investigation

Legacy

Helios

Helios is our weather/welcome display for the Providence and Boulder front door. It serves as an opportunity to welcome guests and show off some our technical expertise.

StandupHub

StandupHub is a web service to easily track your tasks and their statuses for standup.

Stack

Startup

cd standuphub-api-ex # start a pgsl instance on localhost:5432. You can use an OS service instead of docker docker-compose up db # start the phoenix server on localhost:4000 connected to localhost for database mix phx.server cd ../standuphub-web # start webpack server on localhost:3000 pointed to the local phoenix server the API server REACT_APP_API_SERVER=http://localhost:4000 yarn start

Project Ideas

Meeting preparation

A tool to help meeting organizers and attendees better prepare for and record notes from a meeting. One of the discoveries from the PT Estimator requirements gathering is PMs are struggling to get devs to read and comment on stories before a planning meeting.

  • Provide a means to create an agenda
  • Easy to find and read meeting materials (maybe a reminder X before a meeting to review notes if you haven't)
  • Estimate how long it takes to read the materials to not have rushed meeting prep for attendees
  • Tool for taking/sharing notes from a meeting

Enroll Me for Slack

Long conversation in slack are often hard to stay on top of during the work day. This tool would some how extract the relevant portions of a conversation for an enrolled user to read at a later time.

mojotech new tab homepage

Browser extension that brought in like upcoming bdays, lunches for the week, holidays, who is out of the office, upcoming team meetings, how we’re tracking on goals

Speed coding challenge

Competitive games exist for typing and code implementation, but there appears to be a gap for reshaping code in your editor/IDE of choice. This would present editor challenges like:

  • Switch case of vars
  • Reorder words, sentences, paragraphs
  • Advanced find/replace
  • Extract a method
  • Swap keys/values in a hash
  • Repeated steps / macros

Problems:

  • IO monitoring. How do we tell if the developer is started/done?
  • Feedback. How we let the developer know there is still work to perform.
  • Displaying keys pressed.
  • Recording. It would be fun to see how others solve the problem in their editor.

Helios frontend write (sveltejs)

This is an exercise in rewriting the helios frontend in sveltejs, rollup, and polka.

Problems:

  • Define an interface for the client (modernizr)
  • Learn how to use sveltejs, rollup, polka

Where's the line

Description: Every year watching the super bowl, someone repeats the joke quoting some fan at a stadium asking "where's the line" for first down. This project would capture a live football game with the camera and draw in the line on the field beneath the players.

Problems:

  • Detecting football players
  • Drawing a line on a field beneath players at a specific vector
  • Querying the status of the game (NFL API?)
  • Determining where the camera is looking on a field
  • Determining where in the camera FOV the line should be drawn

Maybe use ML? If so, new problems:

  • Collecting data of players vs field
  • Collecting data of correctly drawn lines

Open source jamboard

Description: Google jamboard but open source. Will wants to use CRDTs.

Jamboard alternatives (none of them open source): https://www.techrepublic.com/article/google-jamboard-too-pricy-here-are-4-low-cost-virtual-whiteboard-app-alternatives/

Problems:

  • Setting up a server for asynchronous communication with clients
  • Preview (Google cast display?) and Edit (laptop/tablet)
  • Dealing with CRDT network chattiness
  • Integrating with third party document/file services

Web app monitor app

Description: app that monitors a domain/url for a specific http response (Craig J had worked on a previous version with a former intern)

Apple two factor auth forwarded

Description: What is happening right now is we have 2 factor codes that usually go to an Apple device that is logged in on another device. If that isn’t working you can text a code to the phone number on file. The issue with that is, what if the person isn’t around? So my idea is to set it up with a number that will then forward it to slack.

Pull request CLI

Description: I use my editor to view the branches of pull requests since it provides a number of benefits:

  • View code with preferred formatting
  • Verify code formating and functionality locally
  • Search for code (check for orphans or errors)
  • Prototype inline alternatves

Where this breaks down is viewing and adding comments. Switching to a browser to copy/paste is tedious.

Problems:

  • Consume pull requests API. github, maybe bitbucket. consolidation would be nice since I use both right now.
  • Develop a CLI format for consuming/producing comments. Maybe use a linter style output since a number of editors already support that.
  • Develop plugins for editors: vim, emacs, vscode.
  • Integration third party issue trackers (jira, pivotal, trello). Would be nice not to search/copy/paste issue numbers when branching/committing. Could be other CLI tools.

allocate

A digital product to coordinate scheduling of constrained resources. This is used to schedule which mojos are on a project and for how long.

Technologies: rails and javascript (marionettejs)

Opportunities:

  • Adopt an existing projects and address its technical debt
  • Switch to react over marionette
  • Integration with bamboohr API for PTO sync
  • Design team has mentioned interest
  • Develop an API
  • Add more clients (cli, slack)

https://github.com/mojotech/allocate

Standup Hub

Project management tool to share team stand ups.

Technologies: go and react (15)

Opportunities:

  • Adopt an existing projects and address its technical debt
  • Upgrade react 15 to react 16
  • Dog-fooding. Use the tool you're working on for tasks
  • Design team has mentioned interest
  • Integrations with pivotal tracker, slack, and github
  • Develop an API
  • Different client methods (web, cli, slack)

https://github.com/mojotech/standup-web https://github.com/mojotech/standup-api

Jacob's costing spreadsheet

Jacob maintains a google spreadsheet once a month to assess the costing of the organization which groups costs into employees, teams, departments, locations, and clients. This process is tedious and likely can be improved with an application.

Technologies: TBD

Opportunities:

  • Bootstrap a new project
  • Requirements gathering from an existing product owner
  • Integration with existing service: allocate

GuestBook App completion (react-native)

The guestbook device is currently running a web app on an iPad. Last year, Jen and Steph began work on convertting the project to a react-native application. There are still a number of open issues to resolve before the application can go live.

Technologies: react-native

Opportunities:

  • Adopt an existing projects and address its technical debt
  • Design team has mentioned interest
  • Working in a mobile environment
  • Improve integration with slack

GuestBook App rewrite (flutter)

This is an exercise in rewriting the guestbook react-native app in dart/flutter which is an up and coming competing technology from google.

Technologies: dart/flutter

Opportunities:

  • Bootstrap a new project
  • Learn a completely new language
  • Adopt an existing projects and address its technical debt (referencing react-native guestbook)
  • Working in a mobile environment
  • Present comparison between flutter and react-native

Pivotal Tracker pointing tool

A pivotal tracking tool for pointing stories as a team. Currently teams have count down through something like slack before posting estimates to avoid confirmation bias. This would provide a means to integrate with pivotal tracker and collect estimates to then be reconciled to a final estimate.

Technologies: TBD

Opportunities:

  • Bootstrap a new project
  • Dog-fooding. Use the tool you're working on for tasks
  • Design team has mentioned interest
  • Integrations with pivotal tracker and slack
  • Develop an API
  • Different client methods (web, cli, slack)

Existing repos: github.com/mojotech/pt-estimator/

Internship Interviews

Overview

Old Google Doc Copy

Email

Hi ,

I'm a software engineer at Mojotech. It sounds like you might be a candidate for our (apprenticeship/internship) program after speaking with . I'd like to schedule an hour to interview with you.

Our interviews are a little different from what you may have experienced elsewhere. We're not going to do any coding exercises, algorithm theory, nor puzzles; so there is no need to worry about prepping for those. Instead, I'd like to spend the time learning about what you have worked on by reviewing some of your existing code with you. This would entail you sharing your screen with your preferred editor and guiding me through your code. I'll have questions about what your code does and why it does it that way.

I like to allow for 45 minutes for the code review and 15 minutes for any follow-up questions you may have for me. Let me know when you are available this week.

Regards, Introduction

I’ve been saying something along these lines at the start of the interview. I’m trying to clarify what I’m looking for right at the start.

We're going to be doing a code review. The goal is for you to explain the context and behavior of your application to me. I'm looking for you to help me comprehend your code base and your thought process arriving at this point, not judging your approach. I liken it to, we're not approaching the code base like an algorithms course would, looking for the big-o notation of an algorithm. Rather, we’re interested in what the algorithm does and, probably more importantly, why it does it. I'll have a lot of “what does this do?”, “can you tell me more about that?”, and “can we take a look at that method?”, kind of questions.

Pause here to see if they have any questions. If not, have the candidate start by sharing their screen and editor. Ask them to give you a high level context of what the application is, what the problem is and where you will be starting in the application.

Resist the urge to fix their code. This doesn’t really tell us anything about the candidate. If you see something like a race condition or a bug, pose the question for how they would handle the buggy scenario.

Follow along with the code. Ask them to stop and explain things you find interesting or confusing. See where they take you. Example, seeing a dbConnect parameterized query you can ask how that library works “is that string and value in an array a parameterized query?”. See if they identify the term and can make the leap to SQL escaping/SQL injection.

Joke, praise, have fun. This works best if the candidate is relaxed and is enjoying showing off their code.

Quantification

Picking an arbitrary 1-5 scale here. We can adjust if we find we need more nuance when quantifying a category. General ranking is 1 - poor, 3 - average, 5 - exceptional with 2/4 for shades of gray in between.

Overall

Would you want to mentor/work with the candidate? Use this section as an overall rating of how well the candidate did and the following sections as the details.

  1. present (Something didn’t sit right with me)
  2. likeable
  3. technical (Seem like a nice person)
  4. articulate
  5. passionate (Please put them on my team yesterday)

Codebase

What were you reviewing?

Communication

How well does the candidate communicate their understanding of the code to you.

  1. candidate either doesn’t understand their code or can’t explain what is happening beyond existing comments
  2. candidate explains their code well. Some prompting for technical jargon or clarification is necessary. Maybe some fumbling or examples of code copied from a tutorial or SO.
  3. candidate explains their code superbly. Knows where to look for any particular module/question. Libraries and examples are thoroughly understood before being added.

Passion

  1. going through the motions of a homework or coding camp assignment. No concern for quality or improvements
  2. decent size school or personal project. Notices areas of concern/improvement and desire to do so.
  3. Passion project that scratches an itch. Continuously improving and honing their skills.

Technical

  1. No interest in how the technologies/libraries in the project work
  2. Average understanding of the technologies used in the project.
  3. Deep understanding of the technologies used in the project and delving deeper into how their dependencies work or the possible alternatives to explore.

Old Notes

Need to consolidate these.

Schedule + Logistics

  • Probably starting around mid-May, early June; let us know your availability and we'll have a more concrete start date later
  • Usually goes until early/mid August; flexible
  • Most folks usually work 9-5, but it's flexible; mostly concerned with getting work done
  • Trust and trust-based time off
  • Maybe check that they'll be local during that time; MT doesn't relocate interns

Expectations

  • Learn what it's like to be on a team of professional developers
  • Give + get good code reviews
  • Get proficient with git, and learn how to write reviewable code
  • You'll get something to take away from the experience
  • Open-source their project OR
  • Do some paid work for a client OR
  • Contribute to an open source project

What it's like to work at MT

  • Space for personal/professional development
  • Stipend for conferences + books + a great ebook library
  • MojoTime
  • Sane work hours
  • Consultancy
  • Work for hire; experts
  • Regularly rotated onto different teams/roles
  • Variation + new outlooks/perspectives
  • Catered lunches Tues + Fri
  • Downtown PVD; lots of food/drink options

Candidates

  • What do you know/what questions do you have about MT?
  • What are your interests outside of coding?
  • What are your short and log term goals?
  • Is there any technology you really:
  • Know?
  • Love?
  • Hate?
  • Are confused by?

Mentoring

Slides

What we have

  • 12 week planned internship starting May 17th
  • 4 weeks onboarding onto helios
  • 8 weeks sprints on main project
  • Slack channel for intern help and discussion, #internship. Mentors can be added/removed from @help-interns group to be pinged for help versus passively watching.
  • Markdown docs on netlify. You're looking at it. These cover basic set up, helios, and project ideas. Submit PRs on github.
  • An introductory project for full stack web dev, helios.
  • Pairing onto a client project
  • Systra
  • United Way
  • https://missing.csail.mit.edu/ is a great starting point for onboarding

What we are planning

  • Standups for checkin, code review, or concept discussion. Ideally one of these a week would introduce a new topic (git rebasing, functional programming, shell tooling, RDBMS, etc). The rest could be informal to discuss / share or just chat socially. Hallway may work this.
  • git intro
  • git rebasing intro
  • how to review PRs
  • how to point stories
  • soft skills
    • how to research a new topic
    • how to ask good questions
    • how to know you're stuck
    • how to pair program
  • Mentor stand up. Optional so don't feel obligated to join it unless you want to share or hear what is being worked on (cognizant that everyone is busy).
  • Pair programming. LiveShare in Visual Code

How you can help

  • Participate in #internship. More mentors mean the interns get help sooner and get to connect with more mojos.
  • Review onboarding steps. We ran into some issues with nvm/rvm and need mac users to verify.
  • Review docs. Find issues or areas for improvement.
  • Topics/presentations for the weekly session. Think a shorter, introductory Friday tech talk.
  • PM and designer for the two projects.

FAQ

  • Why #internship when we already have #engineering?

    We noticed the interns from previous years were hesitant to post in #engineering and their own channel seemed to help team cohesion.

  • Why write these docs in a custom svelte app?

    ¯_(ツ)_/¯

2020 Internship


Schedule

  • Kickoff
  • 1 week orientation
  • 1 week StandupHub intro
  • 6 weeks project work

Goals

  • Learn how to:
    • write well formed PRs
    • review PRs
    • work with a team
  • The focus is learning and the programming work is a means to an end. Dive deep into topics when researching

Kickoff

  • Services to join
    • github
    • Slack
    • Pivotal Tracker
    • zeplin
    • Standup Hub
  • Meet the mentors

BLD

Allison
Ben
Heimir

PVD

Craig
Gerald
Joe

Orientation

  • The missing semester
    • Review the first five chapters
    • Ask lots of questions
  • Tool setup
    • Checkout mojodocs
    • Ask fellow mojos! #internship #engineering
  • Reviewing StandupHub PRs
  • Mentor pair programming
  • Make your first PR

StandupHub intro

  • Standup Hub bug fixes
  • Standup Hub features
  • Each PR reviewed by one other intern and one mentor

Project work

  • Standup Hub v1 milestone
  • Elixir/Phoenix API parity
  • New design
  • Github integration
  • Slack integation
  • MVP features

Project work (cont)

  • Standup Hub v2 (maybe)
  • Graphql API
  • Issue tracker integration (Jira, PT)
  • GCal integration
  • Meeting Prep
  • Prep for planning and grooming
  • Search
  • Meeting length tracking
  • Meeting length reporting (gamification)

2021 Internship


Schedule

  • Kickoff
  • 1 week orientation/setup
  • 2-3 weeks Helios project work
  • 8 weeks project work

Goals

  • Learn how to:
    • write well formed PRs
    • review PRs
    • work with a team
  • The focus is learning and the programming work is a means to an end. Dive deep into topics when researching

Kickoff

  • Services to join
    • github
    • Slack
    • Pivotal Tracker
    • zeplin
    • Standup Hub
  • Meet the mentors

BLD

Allison
Ben
Cathy

PVD

Will
Jen
Craig

Orientation

  • The missing semester
    • Review the first six chapters
    • Command-line Environment and Version Control (Git) will be really helpful
    • Ask lots of questions
  • Tool setup
    • Checkout mojodocs
    • Ask fellow mojos! #internship #engineering
  • Mojotech Git Workflow
  • Reviewing Helios PRs
  • Mentor pair programming
  • Make your first PR

Helios intro

  • Helios bug fixes
  • Helios features
  • Each PR reviewed by one other intern and one mentor

Project work

  • Helios v1.0 milestone
  • Complete Graphql API
  • BLD/PVD served from heroku
  • Rails update
  • Admin interface

Project work (cont)

  • Helios v1.1 milestone
  • Slack admin commands
  • Bamboo integration
    • Weclome new employees
    • Birthdays
    • Anniversaries
  • Ball screen performance
  • Service status
    • github/slack/PT/bitbucket/gsuite

2022 Internship


Schedule

  • Kickoff
  • 1 week orientation/setup
  • 2-3 weeks Helios project work
  • 8 weeks project work

Goals

  • Learn how to:
    • write well formed PRs
    • review PRs
    • work with a team
  • The focus is learning and the programming work is a means to an end. Dive deep into topics when researching

Kickoff

  • Services to join
    • github
    • Slack
    • Pivotal Tracker
    • Figma
    • Bamboo
  • Meet the mentors

BLD

Cathy
Allison
Kyle

PVD

Will
Craig
Craig

Orientation

  • The missing semester
    • Review the first six chapters
    • Command-line Environment and Version Control (Git) will be really helpful
    • Ask lots of questions
  • Tool setup
    • Checkout confluence
    • Ask fellow mojos! #internship #engineering

Orientation (cont)


Helios intro

  • Helios bug fixes
  • Helios features
  • Each PR reviewed by one other intern and one mentor

Project work

  • Helios v1.1 milestone
  • Bug fixes for new Phoenix server
  • Switch admin to torch
  • Git events outside mojotech
  • Replace twitter with more dynamic feeds

Project work (cont)

  • Helios v1.2 milestone
  • Motion capture interaction
  • Helios TNG work from #design
    • Mojotech Portal
    • Help office/remote feel connected

Git cheats

Basics

  • git help command: get help for a git command
  • git init: creates a new git repo, with data stored in the .git directory
  • git status: tells you what’s going on
  • git add filename: adds files to staging area
  • git commit: creates a new commit

Write good commit messages!

Even more reasons to write good commit messages!

  • git log: shows a flattened log of history
  • git log --oneline (above but condensed)
  • git log --all --graph --decorate: visualizes history as a DAG
  • git diff : show differences since the last commit
  • git diff : shows differences in a file between snapshots
  • git checkout : updates HEAD and current branch

Branching and merging

  • git branch: shows branches
  • git branch : creates a branch
  • git checkout -b : creates a branch and switches to it same as git branch ; git checkout
  • git switch : switches to specified branch
  • git merge : merges into current branch
  • git mergetool: use a fancy tool to help resolve merge conflicts
  • git rebase: rebase set of patches onto a new base

Remotes

  • git remote: list remotes
  • git remote add : add a remote
  • git push :: send objects to remote, and update remote reference
  • git branch --set-upstream-to=/: set up correspondence between local and remote branch
  • git fetch: retrieve objects/references from a remote
  • git pull: same as git fetch; git merge
  • git clone: download repository from remote

Undo

  • git commit --amend: edit a commit’s contents/message
  • git reset HEAD : unstage a file
  • git checkout -- : discard changes

Advanced Git

  • git config: Git is highly customizable
  • git clone --depth=1: shallow clone, without entire version history
  • git add -p: interactive staging
  • git rebase -i: interactive rebasing
  • git blame: show who last edited which line
  • git stash: temporarily remove modifications to working directory
  • git stash pop: unstash changes and readd them to staging area
  • git bisect: binary search history (e.g. for regressions)
  • .gitignore: specify intentionally untracked files to ignore

Adding files

  • git add . (adds all modified files to staging)
  • git add .filetype (add only certain file types - ex. git add.html adds all .html files to staging, works for any file type)

.gitignore

  • .gitignore will not allow anything included to be staged/commited log.txt - ignore this file name /dir2 - ignore this folder and its entire contents *.txt - ignore all text files