sabinm677 / 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.

Home Page:https://github.com/rwxrob/boost#readme

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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.

📺 Unedited 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

📺 Unedited Video

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

📺 Unedited 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

📺 Unedited 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?

📺 Unedited 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?

📺 Unedited Video

  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

📺 Unedited Video

  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 Small (1.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)

📺 Unedited Video

  1. The Command Line, Fastest Human-Computer Interface
  2. Every Command Line Entered is a Line of Shell Code
  3. 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
  4. 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
  5. 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)
  6. 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
  7. 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)
  8. 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

📺 Unedited Video

  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

📺 Unedited Video

  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

📺 Unedited Video

  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) (More Later)
      9. Use jq to Select from JSON Input (More Later)
      10. Use yq to Select from YAML Input (More Later)
  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

📺 Unedited Video

Please note that I mistakenly say Ctrl-C many times in this video where I actually mean Ctrl-[. See if you can catch all the times I get it wrong. It will be a good way to learn from my mistake.

  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)

📺 Unedited Video

  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

📺 Unedited Video

  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. Know What Syntax Means
    4. Use sh Interpreter to Run Commands in File
    5. Use bash Interpreter to Run Same Commands
    6. Use perl to Attempt Same and Note Errors
    7. Use python3 to Attempt Same and Note Errors
    8. Use chmod +x to Make File Executable
    9. Add #!/bin/sh Shebang Line to Specify Interpreter
      1. Even If Others Work, Use to Communicate to Others
      2. Sets Vi/m Syntax So Suffix Not Needed
    10. What's Up with /usr/bin/env?
    11. Use set -e to Exit Program if Anything Fails
    12. Use set -x When Needed for Debug Tracing
  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
    3. Never Put ./ in Your Path
  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 & and nohup to Start and Keep Program in Background
    7. Use pgrep, pkill, kill, ps, /proc to See Processes
    8. Use crontab to Schedule Jobs in the Background
      1. Editing Your crontab is Not Really Beginner

📺 Unedited Video

  1. Get and Use shellcheck Throughout to Ensure POSIX
  2. Know What POSIX Means POSIX Standard
  3. Know What Script Means
  4. Know What Program and Programming Mean
  5. A Universe of Stateful, Composable Objects with Actions, Interacting
    1. Not Specifically Talking About OOP, Much Bigger
  6. On Programming Humans ...
    1. Routines, Procedures, and Commands in the Real World
    2. What About Algorithms?
  7. It All Started with Math, Know Why Linear Algebra Matters
    1. f(x,y) = 3x + 2y + 3
      1. x,y are Parameters
      2. =, + are Operators
      3. 3x, 2y, 3 are Operands
      4. Function Parameter Variables Receive Argument Values
      5. "This functions returns the value ..."
      6. Same in JS: let z = (x,y) => 3*x + 2*y +3
  8. True Functions are Not Procedures
    1. What About Subroutines?
    2. What About Methods?
    3. What About Operations?
    4. What About Commands?
    5. Even If Language Allows, Group Code Into Either
    6. Know Advantages of One Over the Other
    7. Know What Functional Programming Is
    8. Know What Side Effects Are
  9. Shell Functions Are Not Functions, They Are Subroutines
  10. Use Action Verb When Naming
  11. Use foo() {} to Create a Subroutine (Function)

📺 Unedited Video

  1. All Objects Have States: Mutable, Immutable, Persistent, Dynamic, Static
  2. Variables Save Data as State
  3. Types Declare How to View State Data
    1. Same Data, Different Type
    2. Binary (Base 2, Ones and Zeros, Digital)
    3. Number
    4. Symbol or Letter
    5. String
    6. Bit Field
    7. POSIX Shell Only Has Strings and Integers
    8. Use Strings for Everything
  4. Function Parameter Variables Receive Argument Values
    1. Like Putting Something Into Box or on List
  5. Use = to Declare and Assign Variable
    1. No Spaces Around Operator (=)
  6. Use $foo to Use Variable After Assigned
  7. Always Wrap with Double Quotes ("$foo")
  8. Use "${foo}bar" to Disambiguate
  9. Don't Forget to Check with shellcheck
  10. Use bc When Numbers and Math are Actually Needed
  11. Understand Scope and Considerations
    1. Know What Scope Means
    2. Know What a Block Is
    3. Know What Global Means
    4. Know What Local Means
  12. All Variables are Global in POSIX Shell

📺 Unedited Video

  1. Calling to Communicate
    1. Know What to Call a Function or Subroutine Means
    2. Arguments Contain Incoming Communication
    3. Return Values Produce Outbound Communication
    4. Calls Must Come After Declarations
  2. Arguments Passed as Special Parameter Variables: $1, ...
    1. No Parameters Between Parens ()
    2. Unlike Most Other Languages
  3. Use $0 to Get Name/Path of Executable Script
  4. Use $# to Get the Total Number of Arguments Passed
  5. Use "$@" for "first" "second" "third"
  6. Use "$*" for "first second third"
  7. Reminder About Necessity of Quoting ("foo") Everything
  8. Shell Functions Only Return Integers
    1. Use return [RVALUE] to Set Return Value
    2. Omitting return is Fine
    3. Return Values are Not Output
    4. Use echo/printf and $(foo) to "Return" Strings
  9. Use $? for Last Return Value
  10. Use exit [RVALUE] to Return Value for Program Itself

📺 Unedited Video

  1. Conditions Alter Flow
    1. Use test to Check Condition (Read test Man Page)
      1. Remember, test Not Needed for Single Command
    2. Use && and || to Create Compound Conditions
    3. Know and Use Short-Circuit Logic
      1. Use test to Keep it Clear to Read
      2. Use && to Join (not ||)
    4. Use set -e to Assert Every Line or Exit
      1. Use || true to Make Assertion Optional
    5. Avoid Problematic [] to Check Conditions
    6. Use if to Group Commands If True
    7. Avoid else Whenever Possible, Return Early Instead
    8. Use case to Branch Multiple Conditions
  1. Loops Repeat Commands Until Condition Met
    1. Use while to Repeat While Condition True
    2. Use while true for Infinite Loops
    3. Use until to Repeat Until Condition True
    4. Use for to Repeat for Sequence or Number of Items
      1. Use seq Instead of Bash {1..10} Notation
    5. Use break to Break Out of Any Loop
    6. Use continue to Start Next Iteration Early
  2. Know What Inter-Process Communication (IPC) is and Methods
  3. Signals Communicate Between Programs
    1. Signals are Just One IPC Method
    2. Use kill, pkill to Send a Signal
    3. Use trap to Handle a Signal
  4. Use Loops, nohup, and & to Create Daemons
  5. Conclusion of POSIX Shell Scripting Material
    1. Other Resources
    2. Some Fun Challenges to Get You Started
      1. https://rwx.gg/lang/cha

Coming ...

Remember purpose of Boost is not to cover in depth, but to give a sense of what you need to know and why. Mastering these topics (SQL, for example) could take several months alone, writing your own language grammar in PEGN, a year or more

  1. Delimited (WS, Tab, Bar, CSV, Properties)
  2. Universal JSON Standard and YAML Superset
  3. What About TOML? (I Made the Logo, BTW)
  4. Regular Expressions (BRE, PCRE)
  5. Structured Query Language (SQL)
  6. Parsing Expression Grammar Notation (PEGN)

Coming ...

Coming ...

Coming ...

Coming ...

Coming ...


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

  • Create Minimal Web Sites Using Simple, Standard Tech
  • Code in C for Understanding Modern Computers
  • Code Perl for Practical Prototyping
  • Code Go for Building Big Stuff
  • Code Python for Math, ML, and Automation
  • Know the Problem, Peril, and Practicality of Paradigms

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.

https://github.com/rwxrob/boost#readme

License:Other