Skip to content
/ boost Public
forked from rwxrob/boost

May the 4th every year I run Beginner Boost, a live-streamed, interactive, series of community learning sessions focused on helping you know what you don't know and how to learn it.

License

Notifications You must be signed in to change notification settings

ahWill/boost

 
 

Repository files navigation

Beginner Boost

WIP

Every May the 4th I hold a free series of live-recorded Beginner Boost sessions on Twitch and YouTube that run through the end of July (or so). Below is the outline of current and planned content. This is a living document; it changes from day to day --- even hour to hour --- like software.

🌟 You may want to Watch this GitHub repo to be notified of updates and changes. A Star would be nice as well. If you want to contribute open an Issue to discuss it. Much of the content will be drawn from my personal Zettelkasten repo and my learning labs (which you might also want to watch for changes, but they are not always Boost related). You can also help fund this project by clicking Sponsor. Thanks.

Day 0: Get Set Up, May the 4th Be With You

[Full Live-Recorded Video]

  1. What is the purpose of Beginner Boost?
  2. Beginner Boost, Day 0, Logistics
  3. Who is the Beginner Boost for?
  4. Setup Essential Services

Day 1: Get Motivated to Learn ¡Viva la Revolución!

[Full Live-Recorded Video]

  1. Problems with Traditional Education
  2. Help Others Learn, A Social Responsibility
  3. Become an Autodidact
  4. Tribute to Aaron Swartz

Day 2: The Scientific Method, Our Greatest Learning Tool

[Full Live-Recorded Video]

  1. What did you learn about the Scientific Method?
  2. The RWX Method, Refining the Scientific Method
    1. Read, Research, Reach Out, Repeat
    2. Write Who, What (If), When, Where, Why, and How
    3. Execute, Explore, Experiment, and Exercise
  3. Fail Faster, Fail Better, Fail Often
  4. Meritocracy in the Workplace
  5. Zettelkasten (Slips in a Box) Knowledge Management System
  6. Capture Thoughts as Markdown, The Syntax of Knowledge Source

Day 3: Understand Linux Approach

[Full Live-Recorded Video]

  1. What's Linux? History of UNIX and GNU/Linux
  2. Do Macs Use Linux?
  3. Does Windows Use Linux?
  4. The UNIX Philosophy
  5. How Does Linux Work?
  6. When and How Should I Install Linux?

Day 4: Get on the Terminal

[Full Live-Recorded Video]

Mac: Open and Configure a Mac Terminal
Windows: Install and Configure Modern Windows Terminal
Linux: Open and Configure a Linux Terminal

  1. What's the Difference Between TUI and CLI?
  2. Terminal Emulators Replaced Teletype Machines
  3. The Terminal is Different Than Command Line Shell
  4. Should I install Git-Bash on Windows?
  5. What about Alacritty/Kitty or ...?
  6. My Favorite Theme: GruvBox
  7. Can't I just use VSCode on Windows?
  8. Why not just use Vim plugins with VSCode?
  9. What about WSL2 on Windows?

Day 5: Learn About Containers and Get Docker

  1. What's a Container and Why Should You Care?
    1. The Difference Between "Container" and "Image"?
    2. Kubernetes is the New Operating System
    3. Containers are the New Programs
  2. Install Docker
    1. Install Docker on Windows
      1. Why do I still need WSL2?
    2. Install Docker on a Mac
    3. Install Docker on Linux

Day 6: Run Linux Inside a Container

  1. Linux Distro Matters Less in Container World

    1. docker run -it --rm ubuntu
    2. docker run -it --rm fedora
    3. docker run -it --rm archlinux
    4. docker run -it --rm opensuse
    5. docker run -it --rm nixos/nix
    6. docker run -it --rm kalilinux/kali-rolling
    7. docker run -it --rm blackarch/blackarch
  2. Run Rob's Workspace Linux Container

    1. docker run -it --rm rwxrob/workspace
    2. Workspace Means Not Optimized (3GB)
  3. Use Docker Basic Commands

    1. Use Docker Pull
    2. Use Docker Run
    3. Use Docker Start
    4. Use Docker Attach and Detach Ctrl-pq
    5. Use Docker Stop
    6. Use Docker Remove
  4. Don't Worry About Dockerfile and Compose (For Now)

Day 7: Start Using the Linux Terminal Command Line

  1. Book (free): The Linux Command Line, William Shotts
  2. The Command Line, Fastest Human-Computer Interface
  3. Every Command Line Entered is a Line of Shell Code
  4. Use Bash, Don't Play the Shell Game (For Now)
    1. Interactive Shell is Not Same as Shell Scripting
    2. Why Bash and Not Zsh, Fish, or Whatever?
    3. Use Consistent Supported Bash Tab Completion
  5. Understand the Parts of the Command Prompt
    1. Username
    2. Hostname
    3. Interesting Origin of Email Addresses
    4. Current Directory
    5. Git Branch
    6. Long Versus Short Prompts
  6. Navigate Your Command History Efficiently
    1. Use Up and Down Arrow Keys (For Now)
    2. Use Initial Spaces to Stop Adding to History
    3. Use Hashtag to Make One Line Comment Notes
    4. Don't Learn More for Now (Learn set -o vi Later)
  7. Send Special Terminal Escapes
    1. Remember, a Terminal is Just a Teletype Emulator
    2. Ctrl-c to Send Interrupt Signal (Not Copy)
    3. Ctrl-[ to Send Exact Same as Esc Key
    4. Ctrl-s/Ctrl-q to Buffer and Suspend/Unsuspend
      1. "Help! My Terminal is Frozen!"
    5. Ctrl-z to Background Current Process (Not Quit)
    6. Ctrl-d to Send EOF (End of File)
    7. Ctrl-v, Ctrl-x Do Nothing (From Shell)
    8. Silencing the Terminal Bell
  8. Cut and Paste from Host Operating System
    1. Depends on Terminal
    2. First Ever Mouse Had Three-Button, Middle Was Paste
    3. Windows Right Click to Paste
    4. Ctrl-x|c|v Don't Usually Work (And Shouldn't)
  9. Learn Useful and Essential Beginning User Commands
    1. Use reset to Fix Bork Terminal
    2. Use clear to Clear Screen (and Alternatives)
    3. Use watch to Repeat Things and See Output
    4. Use man/help/info Commands to Get Help
    5. Use less/more for Paging Output
    6. Use ls Command to List Files and Directories
    7. Use type to See What Type of Thing It Is
    8. Use which to See Where Command Lives
    9. Use pwd Command to Show Working Directory
    10. Use cd Command to Change Directories
      1. Use cd foo to Change Into foo Child Directory
      2. Use cd .. to Change Into Parent Directory
      3. Use cd - to Toggle Change to Last Directory
      4. Use cd ~ (or Just cd) to Change to Home Directory
      5. Don't Fall for Silly cd Replacements (Use CDPATH)
    11. Use cal to View Calendar
    12. Use date to View Dates and Times
      1. Use date -u +%Y%m%d%H%M%S to Get ISO Second
      2. Use date -d 'last week' to Exact Time Last Week
    13. Use bc for Floating Point Precision Math Calculations
      1. Don't Forget To Set Scale (scale=2)
      2. Use Semicolons for Same Line
    14. Use top to See Running Processes
      1. Often Replaced with htop

Day 8: Build Up Container with Software

  1. Create and Name a Workspace Container
    1. docker run -it --name boost -h boost ubuntu
    2. Difference Between Detach and Exit
      1. Detach with Ctrl-pq
      2. Exit with exit
  2. Understand Container States and Storage
  3. Manage Software Packages from Command Line
    1. Restoring Documentation and More with unminimize
    2. Understand Linux Package Management
    3. Use apt update
    4. Use apt search
    5. Use apt install
    6. Use apt remove

Day 9: Work with File System from Command Line

  1. OverTheWire, Fun Hacker Practice
  2. Understand the Linux File System
  3. Use mkdir to Make a New Directory
  4. Use rmdir to Remove an Empty Directory
  5. Use touch to Make a New File (or Update Timestamp)
  6. Use mv to Move or Rename a File or Directory
  7. Use cp to Copy a File or Directory
  8. Use rm to Remove a File or Directory
  9. Use ln to Link to a File or Directory
    1. What is the difference between hard and soft link?
    2. Used ln for Multicall Executables (BusyBox)
  10. Use file to See What Details About File
  11. Use stat to See Exhaustive Details About File
  12. Use cat to Display Lines of a File, First to Last
  13. Use tac to Display Lines of a File, Last to First
  14. User head to Display Number of Lines at Top
  15. User tail to Display Number of Lines at Bottom
  16. Use grep to Find Lines of a File
  17. Use uniq to Find Unique Lines
  18. Use sort to Sort Lines
    1. Use wc to Count Lines, Words, Bytes, and Runes

Day 10: Understand Streams, Pipes, and Redirection

  1. Understand Standard Output and Error
    1. Use echo and printf to Print Stuff
      1. Difference Between echo and printf
      2. Never Use print (for Printers)
    2. Use > File Redirect Operator
      1. Fix find Command Errors with Redirection
    3. Use >> File Append Operator
    4. Use >| Force File Overwrite Operator
  2. Understand Pipes and Pipeline
    1. Use | Pipe Operator to Connect Out with In
    2. Power of Pipelines and Shell Integration
      1. Watch Ken Thompson Describe UNIX Pipes
      2. Pipes are at the Core of UNIX Philosophy
      3. Use Shell and Pipes from Within Applications
    3. Transform and Filter Lines
      1. Use nl to Number Lines
      2. Use rev to Reverse Line
      3. Use tee to Pipe and Redirect Lines
      4. Use echo for Arguments and cat for Lines
      5. Use xargs to Transform Lines Into Arguments
      6. Use cut to Remove Stuff from Lines of Stream
      7. Use tr to Translate Stuff in Lines of Stream
      8. Use sed to Edit Lines of Stream (Streamed ed)
      9. Use jq to Select from JSON Input
      10. Use yq to Select from YAML Input
  3. Get Standard Input Into Your Programs
    1. Input Most Useful After You Know How to Code
    2. Use < File Input Redirect Operator
      1. Always Use < Instead of cat foo | ...
    3. Use << Here Document Operator
    4. Use read to Read Input
      1. Combine printf and read to Create Prompts
      2. Always Use -r and Understand Why
      3. Use for or while with Read for Line Loops
    5. Use curl to Read Input from Internet
      1. Usually Combined with jq or yq

Day 11: Edit Files with Vi (Then Vim)

  1. Vi ("Visual Mode") History and Legacy
  2. Why Vi/m and Not NeoVim/Emacs/Nano/VSCode?
  3. Appreciate the Difference Between vi and vim
  4. Restore Esc Key to Its Original Keyboard Home
  5. Use Ctrl-[ Instead of Esc Key (Never Ctrl-x|z)
  6. Do the Vim Tutorial (vimtutor), But Beware
  7. Other Recommended Learning Resources
    1. https://openvim.com
    2. http://vimgenius.com (no s)
    3. Vim Adventures is Strongly Discouraged
  8. Start with Defaults and Zero Configuration
    1. Complex .vimrc is Not for Beginners
    2. Customizing .vimrc Requires Scripting Skills
    3. Eventually, Learn a Little Vimscript
  9. Avoid Vim Pane Splitting (Use TMUX Instead)

Day 12: Manage Users, Groups, and Permissions

  1. How Much User Stuff Do I Need to Know?
  2. Create and Manage Users and Groups
    1. Use adduser and useradd to Create User
    2. Use su - <user> to "Login" as User
    3. Use deluser and userdel to Delete User
    4. Use usermod to Modify User Settings
    5. Use addgroup and groupadd to Create Group
    6. Use delgroup and groupdel to Delete Group
    7. Use groupmod to Modify User Settings
    8. Use passwd to Change Passwords
    9. Know the Files Involved
      1. /etc/passwd
      2. /etc/shadow
      3. /etc/group
    10. Use id to Get the User and Group Information
    11. Use login to Login
      1. Does Not Register as Logged in User
    12. Use su - <user> to Simulate a Login as Root
    13. Understand root Access
      1. Use sudo to Grant root (SuperUser) Access
      2. Use sudo su - to Get Root Shell
      3. use doas -s to Do Something As Root
    14. Use who,w,whoami,who am i,last to See Users
  3. Understand UNIX File and Directory Ownership and Permissions
    1. Use ls -l to See Permissions
    2. Use stat to See Even More About File
    3. Read, Write, and Execute Permission
      1. On Files
      2. On Directories
  4. Modify Ownership and Permissions
    1. Use chmod to Change Permissions
    2. Use chown to Change Owner (and Group)
    3. Use chgrp to Change Group
  5. Know About Setuid, Setgid, and Such, But Don't Use

Day 13: Commands Are Code, Creating Shell Scripts

  1. You're Already Coding, Every Command is Code
    1. Commands are Really Just Functions with Arguments
  2. POSIX Shell is a Universal Command Interpreter
    1. Shell Started as Bourne Shell, Now Ash and Dash
    2. Korn Shell Led to Bash and Zsh Interpreters
    3. Awk, Perl, Python, Ruby, Node Also Shell Scripting
  3. Create First Script
    1. Create a File Containing Some Commands
    2. Know What Interpreted Means
    3. Use sh Interpreter to Run Commands in File
    4. Use bash Interpreter to Run Same Commands
    5. Use perl to Attempt Same and Note Errors
    6. Use chmod +x to Make File Executable
    7. Add #!/bin/sh Shebang Line to Specify Interpreter
  4. Difference Between Running and Sourcing Scripts
    1. Use Dot (.) or source to Source a Script
    2. Most Stuff Should Be in Script (Subprocesses)
    3. Some Stuff Can't Be Done Any Other Way
      1. Change Current Working Directory
      2. Modify Current Environment
  5. Put Executables in Your PATH to Run From Anywhere
    1. Use which to See Which Executable Wins
    2. Understand Difference Between which and type
  6. Manage Jobs and Processes
    1. A Running Program is a Process
    2. A Backgrounded Program a Job
    3. Ctrl-z to Background Running Process
    4. Use jobs to See All Background Processes
    5. Use fg to Bring Background Job Forward
    6. Use & to Start Program in Background
    7. Use pgrep, ps, /proc to See Processes
    8. Use crontab to Schedule Jobs

Day 14: POSIX Shell Programming Syntax

  1. Know What Syntax Means
  2. Know What POSIX Means
  3. Know What Script Means
  4. Know What Program and Programming Mean
  5. Use shellcheck Throughout to Ensure POSIX
  6. Functions Group Commands
    1. Know What a Function Is
    2. Know What an Argument Is
    3. Know What a Return Value Is
    4. Commands are Functions
    5. Functions are Commands
    6. Use foo () {} to Create a Function
    7. Know What a Block Is
    8. Functions Have Arguments
      1. Arguments Do Not Go in ()
      2. Use $1 for First Argument (And So On)
    9. Functions Have Return Values
      1. Understand UNIX Return Values
      2. Function Return Values Same as Commands
    10. Distinguish Return Value from Output
    11. Use return to Set Return Value
      1. Sometime Omitting return is Fine
    12. Use set -e to Exit Program if Anything Fails
    13. Use exit to Exit Program Immediately
    14. Write Clean Functions
      1. Some Functions are Not Functions At All
      2. Know What a Subroutine or Procedure Is
      3. Know How True Function Differs from Procedure
      4. Know What Side Effects Are
      5. Know What Functional Programming Is
      6. Separate Functions from Procedure "Functions"
  7. Variables Save State
    1. Use = With No Surrounding Spaces to Assign Variable
    2. Like Putting Something Into Box or on List
    3. Know What Scope Means
    4. Know What Global and Local Mean
    5. All Variables are Global in POSIX Shell
    6. Know What Type Means When Programming
    7. Variables Contain Data of Different Types
      1. All Types are Ultimately the Same Binary Bits
    8. Usually Wrap Shell Variables in Quotes ("$foo")
    9. Use ${} to Disambiguate
  8. Conditions Alter Flow
    1. Use test to Check Condition
    2. Avoid Problematic [] to Check Conditions
    3. Use if to Group Commands If True
    4. Avoid else Whenever Possible
    5. Use case to Branch Multiple Conditions
    6. Use set -e to Add Exit on Any Error Condition
    7. Know and Use Short-Circuit Logic
  9. Loops Repeat Commands Until Condition Met
    1. Use break to Break Out of Any Loop
    2. Use continue to Start Next Iteration Early
  10. Signals Communicate Between Programs
    1. Know What Interprocess Communication (IPC) Is
    2. Signals are Just One IPC Method
    3. Use kill, pkill to Send a Signal
    4. Use trap to Handle a Signal
    5. Don't Bother with nohup (Use docker, screen/tmux)
  11. Some Fun Challenges to Get You Started
    1. https://rwx.gg/lang/cha

More to come (boost is at least 100 days)...

About

May the 4th every year I run Beginner Boost, a live-streamed, interactive, series of community learning sessions focused on helping you know what you don't know and how to learn it.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published