YAML

This web site is data-driven by a set of YAML files. YAML is like JSON, but easier to read and write. Change this single file to add content to this site. You don't need to know how the data is converted into HTML. The web application does all that for you.

The Yaml File

content:
  subjects: |
    The subjects below are mainly suggested topics that can be discussed in the club  depending on popular interest.
    Some will be [emphasized](pages/EmphasizedSubjects.md) since they will help the participants work with the general projects, but most are optional.
data:
  contact: |
    **Emails**

    * [Admin](mailto:pca@willo.org)
    * [Membership](mailto:pca@willo.org)
    * [Web](mailto:pca@willo.org)
    * [Info](mailto:pca@willo.org)
  notebooks:
    baseUrl: https://nbviewer.org/github/PhoenixCodingAcademy/PhoenixCodingAcademy/blob/main/projects/notebooks
    baseUrl1: https://github.com/PhoenixCodingAcademy/PhoenixCodingAcademy/blob/main/projects/notebooks
    gitUrl: https://github.com/PhoenixCodingAcademy/PhoenixCodingAcademy/blob/main/projects/notebooks
    meta:
    - cat: Math
      id: Calculus
      short: Introduction to using Python to solve some calculus problems.
    - cat: Math
      id: DiffEq0
      short: Template for Differential Equations
    - cat: Math
      id: DiffEq1
      short: Template for Differential Equations
    - cat: Math
      id: DiffEq2
      short: Template for Differential Equations
    - cat: Math
      id: DiffEq3
      short: Template for Differential Equations
    - cat: Math
      id: Linear Algebra
      short: Some linear algebra
    - cat: Math
      id: Linear Regression
      short: Create a set of points and find the best line that fits those points.
    - cat: Math
      id: "Lotka\u2013Volterra Equations"
      short: Systems of linear differential equations that model predator/prey population
        relationships.
    - cat: Math
      id: SIR Model
      short: Epidemiology and the SIR Model. Systems of linear differential equations.
    - cat: Math
      id: sympy1
      short: use Sympy to symbolically solve this quadratic equation.
    - cat: Data Science
      id: Plot Graphs
      short: Use matplotlib to plot some functions
    - cat: Data Science
      id: DataScience1
      short: Basic Reproducible Research and Data Science
    - cat: Artificial Intelligence
      id: AI/Gradient Descent
      short: Minimize a given function iteratively
    - cat: Artificial Intelligence
      id: AI/Linear Regression
      short: Find a linear relation between any input and a continuous output; e.g.
        real numbers
    - cat: Artificial Intelligence
      id: AI/Logistic Regression
      short: Find a relation between any input and a discrete output; e.g. {Yes, No}
        or {Bird, Cat, Dog, ...}
    - cat: Artificial Intelligence
      id: AI/Linear Regression (TF)
      short: Use TensorFlow to find a relation between any input and a continuous
        output; e.g. real numbers
    - cat: Artificial Intelligence
      id: AI/Identify Faces
      short: Take a photo and split out all the faces
    - cat: Chemistry
      id: Py3dMol
      short: Model a molecule in 3D
    - cat: Chemistry
      id: PyMol
      short: Model a molecule in 3D
    - cat: Chemistry
      id: PyMolPy3
      short: Model a molecule in 3D
    - cat: Cryptography
      id: Cryptography
      short: Examples of RSA and AES encryption and number theory.
    - cat: Python
      id: PythonLists
      short: Examples of manipulating lists, playing cards, and dealing hand.
    - cat: Math
      id: SimultaneousEquations
      short: Solve a three-variable simultaneous equation with numpy linear algebra.
    - cat: Computer Science
      id: Wolfram Automata
      short: From Stephen Wolfram's New Kind of Science
    - cat: Other
      id: Bitcoin and Blockchain Mining
      short: SHA-256 Hashing and Bitcoin Mining
    - cat: Other
      id: Cadquery Legos
      short: Use CadQuery to show shapes on a 3D screen
    - cat: Other
      id: Demographics
      short: Run population estimations of a country based on various assumptions.
subjects:
- id: tools
  short: Popular software applications
  title: Tools
- courses:
  - description: |
      ### Method 1
      First, let's see if you can actually run PowerShell:

      * WIN-Q, search "powershell"
      * Click "Windows PowerShell (x86)"
      * If you see a console window that reads "Windows PowerShell (x86)" where you can enter commands like "dir", then you have powershell installed.
      * Else continue with next method.

      ### Method 2
      Try this:
      * From the command console (cmd), run `%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe`
      * If that works, great. This is your new way to start a power shell.

      ### Method 3
      * WIN-Q, search "powershell"
      * See "Windows PowerShell (x86)" as an option
      * Expand the arrow to the right
      * Click "Open file location". If this doesn't exist, then try the next method.
      * Right click the "Windows PowerShell (x86)" link and select "Properties"
      * Copy the Target into the clipboard. It should be something like `"%windir%\...\PowerShell_ISE.exe"
      * Open a command console (cmd)
      * Paste that string into the window and hit ENTER
      * You might see a powershell window open up.
      * If instead, you just want the shell (without the window) then run the command above but remove the `_ISE` from the end.

      ### Method 4
      * If none of these methods work, then we have a final method.
      * Ensure you have [chocolatey](/subjects/chocolatey) installed.
      * From that folder, run "cmd" to get a command shell in that folder.
      * Run `choco install powershell.portable`
      * You should then be able to run PowerShell by typing `pwsh`
    id: powershell_install
    title: Install PowerShell
  description: |
    PowerShell is Microsoft's version of the Linux Bash Shell.
    Your school might not let you run PowerShell because it has locked it down by restricting it in the Local Group Policy Editor or the Local Security Policy.
    Since you don't have elevated permissions, you cannot change this.
    This section is more for students with their own machines that does not have this locked down.
  id: powershell
  links:
  - text: What is PowerShell?
    url: https://learn.microsoft.com/en-us/powershell/scripting/overview?view=powershell-7.3
  - text: PowerShell Documentation
    url: https://learn.microsoft.com/en-us/powershell/
  parents: tools
  short: Microsoft's newest replacement of DOS; competitor with Bash
  title: PowerShell
- courses:
  - assignments:
    - acceptance: |
        * GIVEN I run `git --version` at the command prompt
        * THEN I see something like `git version 2.34.1.windows.1`
      description: |
        You'll need to have git installed on your machine before you can use it.
        In this assignment, you will install Git on your local machine.
        Follow the steps in the parent course.
      goal: Install Git on your local machine
      id: Git_Install_1
      title: Install Git
    description: |
      In this short course, you will ensure Git is installed on your machine so that you can run the git commands.

      Git is a command-line toolkit that you can run locally. Many editors and IDEs have Git integration, and some use these commands.
      Let's see if you have Git already installed:

      * Run the command shell; e.g. WIN-Q, cmd
      * GET a windows that looks like this:
      ```dos
      Microsoft Windows [Version 10.0.19045.3324]
      (c) Microsoft Corporation. All rights reserved.

      C:\users\sofia
      >
      ```
      * Run `git --version`
      * GET `git version 2.34.1.windows.1` or something similar if Git is installed. You are done.
      * ELSE GET `'git' is not recognized as an internal or external command, operable program or batch file.` if Git is not installed.

      **Install Git**

      * As described in [installers](/subjects/installers), start in your [apps folder](/pages/Glossary.md#apps-folder).
      * Go to https://git-scm.com/downloads
      * Click `Windows`
      * GET https://git-scm.com/download/win
      * Under `Portable ("thumbdrive edition")`, click `64-bit Git for Windows Portable.`
      * GET file is downloaded. Ensure it is saved in your apps folder.
      * Run the exe there to unzip the files
    id: Git_Install
    title: Ensure Git is installed
  - assignments:
    - acceptance: |
        * GIVEN I open this URL in my browser: http://127.0.0.1:5000/
        * THEN I see the web site running
      description: |
        Get the repo name:

        * Go to the PhoenixCodingAcademy account on Github: https://github.com/PhoenixCodingAcademy
        * GET a web page that reads "Phoenix Coding Academy Computer Science Club" at the top.
        * Click Repositories in the menu at the top
        * GET PhoenixCodingAcademy marked as a public repo.
        * Click PhoenixCodingAcademy
        * GET your url should now be https://github.com/PhoenixCodingAcademy/PhoenixCodingAcademy
        * SEE a big green button that says "Code"
        * Click that button
        * See tab HTTP
        * Click the copy button to copy " https://github.com/PhoenixCodingAcademy/PhoenixCodingAcademy.git" into the clipboard

        Clone the repo:

        * Find a folder (or create one) in Windows Explorer
        * Run the command shell; e.g. WIN-Q, cmd
        * GET a windows that looks like this:
        ```dos
        Microsoft Windows [Version 10.0.19045.3324]
        (c) Microsoft Corporation. All rights reserved.

        C:\sofia\projects
        >
        ```
        * From the folder in that terminal, run `git clone https://github.com/PhoenixCodingAcademy/PhoenixCodingAcademy.git`
        * GET a new subfolder named git clone "PhoenixCodingAcademy"
        * Change to that folder and run `StartWebServer.bat`
        * GET:
        ```dos
        * Serving Flask app 'main'
        * Debug mode: on
        WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
        * Running on all addresses (0.0.0.0)
        * Running on http://127.0.0.1:5000
        * Running on http://192.168.0.4:5000
        Press CTRL+C to quit
        * Restarting with watchdog (windowsapi)
        * Debugger is active!
        * Debugger PIN: 136-839-246
        ```
      id: Git_CloneWebRepo_2
      title: Clone the Web Repo
    description: 'You don''t need a GitHub account to clone a repo from Github, but
      you do need an account to push your changes back.

      '
    id: Git_CloneWebRepo
    parents: Git_Install_1
    purpose: |
      * Ensure git is installed on your machine.
      * Show the basics of cloning a repository (repo) from Github.
      * Run the web site locally.
    title: Clone the web repo to a local folder and run the site.
  - assignments:
    - acceptance: ''
      description: |
        If you already have an account in https://github.com, then you're done.
        Else follow these instructions:
      id: Git_CreateAccount_1
      title: Create your GitHub account
    description: |
      You will need an GitHub account to help create content in this course.
      This is also how pull requests will be made, your authentication to
      use the web site and take exams, to report bugs, and communicate
      with other team members.
    id: Git_CreateAccount
    title: Create your GitHub Account
  description: |
    **Git** is a distributed version control system that tracks changes in any set of computer files, usually used for coordinating
    work among programmers who are collaboratively developing source code during software development. It is a block-chain of changes.
    You typically install Git on your local machine.

    **Github** is an online web version of Git that has become the defacto place to push your local changes to.

    Git was originally authored by Linus Torvalds in 2005 for development of the Linux kernel, with other kernel developers
    contributing to its initial development. Git is designed to handle everything from small to very large projects with
    speed and efficiency. It is easy to learn and has a tiny footprint with lightning-fast performance. Git is widely used by
    developers worldwide for a range of applications, including deep learning and machine learning, signal processing and communications,
    image and video processing, control systems, test and measurement, computational finance, and computational biology.

    Git must be the most powerful, simplest method to track your changes to any file you create. Git works best with simple text editors,
    like Notepad++, VS Code, or any IDE.
  id: git
  links:
  - https://en.wikipedia.org/wiki/Git
  - description: |
      The entire Pro Git book, written by **Scott Chacon** and **Ben Straub** and published by Apress, is available here.
      All content is licensed under the Creative Commons Attribution Non Commercial Share Alike 3.0 license.
      Print versions of the book are available on Amazon.com.
      The version found here has been updated with corrections and additions from hundreds of contributors.
    short: Online book for free
    text: Git Book (Scott Chacon and Ben Straub) Apress
    url: https://www.git-scm.com/book/en/v2
  - text: What is Git? - Azure DevOps | Microsoft Learn.
    url: https://learn.microsoft.com/en-us/devops/develop/git/what-is-git.
  - text: W3Schools Git Tutorial
    url: https://www.w3schools.com/git/default.asp
  - text: Learn the Basics of Git in Under 10 Minutes
    url: https://www.freecodecamp.org/news/learn-the-basics-of-git-in-under-10-minutes-da548267cc91/
  - text: Why Use Git for Your Organization
    url: https://www.atlassian.com/git/tutorials/why-git
  - text: What is Git | Atlassian Git Tutorial
    url: https://www.atlassian.com/git/tutorials/what-is-git
  - text: Modern Git Commands and Features You Should Be Using
    url: https://martinheinz.dev/blog/109
  - text: Git Tutorial - javatpoint
    url: https://www.javatpoint.com/git
  - text: What is GitHub?
    url: https://www.youtube.com/watch?v=pBy1zgt0XPc
  - text: Git Tutorial for Dummies?
    url: https://www.youtube.com/watch?v=mJ-qvsxPHpY
  - text: How To Use Git Effectively
    url: https://www.digitalocean.com/community/tutorials/how-to-use-git-effectively
  - text: 'Not Just for Coders: 9 Ways To Use GitHub For Creative Work'
    url: https://www.makeuseof.com/tag/just-coders-9-ways-use-github-creative-work/
  - text: Planning and tracking with Projects with Github
    url: https://docs.github.com/en/issues/planning-and-tracking-with-projects
  - text: Awesome open-source libraries voted by members
    url: https://github.com/github-20k/awesome-opensource
  - text: 'Repos Beyond Code: A Collection of Creative Uses of GitHub'
    url: https://www.brendanschlagel.com/2018/09/28/repos-beyond-code-a-collection-of-creative-uses-of-github/
  - text: What is in that .git directory?
    url: https://blog.meain.io/2023/what-is-in-dot-git/
  parents: tools
  purpose: |
    Knowing Git is a requirement for any programming job, much like Calculus is a requirement for engineering jobs. But you don't need to
    be a developer to use it. It's not a programming language. Have you ever created a Word document, and you saved versions of that file
    with the file name containing the date and time; e.g. "Resume 2023-08-22 10:53.docx", and with Track Changes on? Why did you do this?
    Because you wanted to go back to see what you did, or perhaps to undo changes if the formatting gets corrupted. Git does this
    automatically for you, for all files in a folder tree.

    With Git, you and your friends can work together in a team-manner to create a project that is expressed as a set of files.

    Some uses of Git:

    * Finding free, popular open source software. If it's free and you can download it to install on your machine, chances are very high the source code is in Github along with the documentation.
    * Discover what technologies are in hot demand. Github tracks the [popularity of downloads and commits by programming language](https://pypl.github.io/PYPL.html). For example, you can see which programming language is downloaded the most.
    * Creating a book. Yes, authors often use Git to create their books or academic papers. Markdown and Latex are populate choices.
    * Creating a resume. It is well known that employers often look at your Github account to determine how technical you are and what you are interested in.
    * Working together, remotely, asynchronously (perhaps in different timezones), to create something in a non-linear manner.
    * Scientific Research, for example, with Jupyter Notebooks to create Reproducible Research Papers.
    * Learning new ways to develop by looking at other developers commits and pull requests to see how they solved problems.
    * Incentive to be a better writer since everyone is looking at what you create.
    * Project Planning, where issues are logged and resolved.
  short: Use Git to help contribute to the club, and build collaborative project.
  title: Git Version Control
- description: |
    **Git** is a distributed version control system that tracks changes in any set of computer files, usually used for coordinating
    work among programmers who are collaboratively developing source code during software development. It is a block-chain of changes.
    You typically install Git on your local machine.

    **Github** is an online web version of Git that has become the defacto place to push your local changes to.

    Git was originally authored by Linus Torvalds in 2005 for development of the Linux kernel, with other kernel developers
    contributing to its initial development. Git is designed to handle everything from small to very large projects with
    speed and efficiency. It is easy to learn and has a tiny footprint with lightning-fast performance. Git is widely used by
    developers worldwide for a range of applications, including deep learning and machine learning, signal processing and communications,
    image and video processing, control systems, test and measurement, computational finance, and computational biology.

    Git must be the most powerful, simplest method to track your changes to any file you create. Git works best with simple text editors,
    like Notepad++, VS Code, or any IDE.
  id: github
  links:
  - https://en.wikipedia.org/wiki/Git
  - description: |
      The entire Pro Git book, written by **Scott Chacon** and **Ben Straub** and published by Apress, is available here.
      All content is licensed under the Creative Commons Attribution Non Commercial Share Alike 3.0 license.
      Print versions of the book are available on Amazon.com.
      The version found here has been updated with corrections and additions from hundreds of contributors.
    short: Online book for free
    text: Git Book (Scott Chacon and Ben Straub) Apress
    url: https://www.git-scm.com/book/en/v2
  - text: What is Git? - Azure DevOps | Microsoft Learn.
    url: https://learn.microsoft.com/en-us/devops/develop/git/what-is-git.
  - text: W3Schools Git Tutorial
    url: https://www.w3schools.com/git/default.asp
  - text: Learn the Basics of Git in Under 10 Minutes
    url: https://www.freecodecamp.org/news/learn-the-basics-of-git-in-under-10-minutes-da548267cc91/
  - text: Why Use Git for Your Organization
    url: https://www.atlassian.com/git/tutorials/why-git
  - text: What is Git | Atlassian Git Tutorial
    url: https://www.atlassian.com/git/tutorials/what-is-git
  - text: Git Tutorial - javatpoint
    url: https://www.javatpoint.com/git
  - text: What is GitHub?
    url: https://www.youtube.com/watch?v=pBy1zgt0XPc
  - text: Git Tutorial for Dummies?
    url: https://www.youtube.com/watch?v=mJ-qvsxPHpY
  - text: How To Use Git Effectively
    url: https://www.digitalocean.com/community/tutorials/how-to-use-git-effectively
  - text: 'Not Just for Coders: 9 Ways To Use GitHub For Creative Work'
    url: https://www.makeuseof.com/tag/just-coders-9-ways-use-github-creative-work/
  - text: Planning and tracking with Projects with Github
    url: https://docs.github.com/en/issues/planning-and-tracking-with-projects
  - text: Awesome open-source libraries voted by members
    url: https://github.com/github-20k/awesome-opensource
  - text: 'Repos Beyond Code: A Collection of Creative Uses of GitHub'
    url: https://www.brendanschlagel.com/2018/09/28/repos-beyond-code-a-collection-of-creative-uses-of-github/
  - text: What is in that .git directory?
    url: https://blog.meain.io/2023/what-is-in-dot-git/
  parents: git
  purpose: |
    Knowing Git is a requirement for any programming job, much like Calculus is a requirement for engineering jobs. But you don't need to
    be a developer to use it. It's not a programming language. Have you ever created a Word document, and you saved versions of that file
    with the file name containing the date and time; e.g. "Resume 2023-08-22 10:53.docx", and with Track Changes on? Why did you do this?
    Because you wanted to go back to see what you did, or perhaps to undo changes if the formatting gets corrupted. Git does this
    automatically for you, for all files in a folder tree.

    With Git, you and your friends can work together in a team-manner to create a project that is expressed as a set of files.

    Some uses of Git:

    * Finding free, popular open source software. If it's free and you can download it to install on your machine, chances are very high the source code is in Github along with the documentation.
    * Discover what technologies are in hot demand. Github tracks the [popularity of downloads and commits by programming language](https://pypl.github.io/PYPL.html). For example, you can see which programming language is downloaded the most.
    * Creating a book. Yes, authors often use Git to create their books or academic papers. Markdown and Latex are populate choices.
    * Creating a resume. It is well known that employers often look at your Github account to determine how technical you are and what you are interested in.
    * Working together, remotely, asynchronously (perhaps in different timezones), to create something in a non-linear manner.
    * Scientific Research, for example, with Jupyter Notebooks to create Reproducible Research Papers.
    * Learning new ways to develop by looking at other developers commits and pull requests to see how they solved problems.
    * Incentive to be a better writer since everyone is looking at what you create.
    * Project Planning, where issues are logged and resolved.
  short: Use Github to share your projects in the cloud.
  title: Github
- id: environments
  short: General overview of operating systems with emphasis on Windows and Linux
  title: Frameworks and Runtime Environments
- description: |
    Much of the interesting software can be installed on your laptop without requiring admin permissions, if you know how.
    You are not bypassing the security of the laptop, but rather using a secondary approach, called the portable installation.
    Once installed, the software cannot perform elevated operations, but it can run its intended functions just for you.

    The general strategy is to create a root subfolder for you; e.g. `C:\sofia` (called the "app folder") and then add all your portable software there.

    An alternative strategy is to install [scoop](/subjects/scoop) or [chocolatey](/subjects/chocolatey) or both
    to make installing software very easy. Winget requires admin permissions and so we'll ignore it. Some decisions facts:
    * Chocolatey tends to require more admin permissions and PowerShell
    * Scoop installs more to user folders.
  id: installers
  links:
  - text: Install anything without Admin rights
    url: https://dev.to/davidkou/install-anything-without-admin-rights-4p0j
  - text: 'Chocolatey vs. Scoop: Package Managers for Windows'
    url: https://dev.to/bowmanjd/chocolatey-vs-scoop-package-managers-for-windows-2kik
  - text: Scoop or Chocolatey? Which Windows 10 package manager should you use?
    url: https://www.onmsft.com/feature/scoop-or-chocolatey-which-windows-10-package-manager-should-you-use/
  parents: environments
  short: Methods to Install Software
  title: Methods to Install Software
- courses:
  - description: |
      ### Method 1
      * Follow the instructions here: https://www.liquidweb.com/kb/how-to-install-chocolatey-on-windows/

      ### Method 2
      * In your apps folder, download [chocolatey.zip](/zips/chocolatey1.zip) (but remove the "1" from the URL. Google indexer doesn't like this file.) and "Extract here".
      * You should have a new folder called "chocolatey".
      * Set a user environment variable `ChocolateyInstall` to point to this new chocolatey folder.
    id: chocolatey_install
    prerequisites: powershell
    short: The install process is not textbook because of your laptop restrictions.
    title: Install Chocolatey
  description: |
    Chocolatey is a software installer that we'll need to install user-mode PowerShell (called "powershell.portable" or just "pwsh")
    in the event you cannot get your local PowerShell to run. Admin-mode PowerShell comes out of the box with Windows 10, but local execution policies prevent it from running.

    We also need PowerShell to install [scoop](/subjects/scoop).

    You probably won't need Chocolatey anymore since Scoop will solve most if not all of our needs, but there might be software that only Chocolatey can install that Scoop cannot.
  id: chocolatey
  links:
  - text: The Package Manager for Windows
    url: https://chocolatey.org/
  - text: Install Choco without admin
    url: https://dev.to/davidkou/install-anything-without-admin-rights-4p0j
  parents: installers
  short: Chocolatey package manager and installer
  title: Chocolatey
- courses:
  - description: |
      Here is just some of the many things you can installed with scoop.
      Some will (or eventually) have their own "subject" in this web site.

      * `nodejs` - the JavaScript [nodejs](https://nodejs.org/en/about) runtime
      * `haskell` -
      * `` -
      * `sbcl` - common lisp environment
    id: scoop_course2
    title: Cool stuff you might install with scoop
  description: |
    Scoop installs programs from the command line with a minimal amount of friction. It:

    * Eliminates permission popup windows
    * Hides GUI wizard-style installers
    * Prevents PATH pollution from installing lots of programs
    * Avoids unexpected side-effects from installing and uninstalling programs
    * Finds and installs dependencies automatically
    * Performs all the extra setup steps itself to get a working program

    The apps that install best with Scoop are commonly called "portable" apps: i.e. compressed program files
    that run stand-alone when extracted and don't have side-effects like changing the registry or putting files
    outside the program directory.
  id: scoop
  links:
  - https://github.com/ScoopInstaller/Scoop
  - text: Why should you care about Scoop?
    url: https://github.com/ScoopInstaller/scoop/wiki/So-What
  - text: Search Scoop Packages
    url: https://scoop.sh/
  - text: 'Finally, a Decent Package Manager for Windows: Scoop'
    url: https://mrotaru.co.uk/blog/windows-package-manager-scoop/
  parents: installers
  short: Scoop package manager and installer
  title: Scoop
- courses:
  - assignments:
    - description: |
        * Create a folder named "Cygwin" in your APPS folder.
        * Go to https://www.cygwin.com/
        * Click link "Install Cygwin by running setup-x86_64.exe"
        * Save the "setup-x86_64.exe" file in your "Cygwin" folder
        * Run that exe. If it requires you to have admin permissions, then instead:
          * Start a command prompt in that folder
          * Run `setup-x86_64 --no-admin`
        * Choose "Install from Internet"
        * Set your Root Directory to your "Cygwin" folder; e.g. `C:\Sofia\Cygwin`
        * Choose "Install for just me"
        * Next
        * Set your Local Package Directory to your "Cygwin" folder; e.g. `C:\Sofia\Cygwin`
        * Next, Direct Connection
        * Next, Choose any mirror that sounds good.
        * Next, and wait for it to download all the package references.
        * When finished, you should see a list of things you can install in a window titled "Cygwin Setup - Select Packages". A package is an application you can install.
        * Choose View = "Full" to see all the packages.
      id: cygwin_basics_1
      title: Install Cygwin
    - description: |
        Install a Package (or app):

          * From [the previous assignment](/assignments/cygwin_basics_1), you see the "Cygwin Setup - Select Packages" window.
          * Suppose you want to play with the Common Lisp language.
          * Search for "lisp"
          * See package "clisp" appear.
          * In the "New" column, you can choose "Install"
          * Select "Next" at the bottom to install this package.
          * When finished, you can close the setup window.

        Run the app:

          * From the Cygwin folder, run the "Cygwin.bat" file to get a BASH shell terminal.
          * Type "clisp" to run the Common LISP [REPL](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop).
          * You should see `[1]>`
          * Type in there `(+ 23 45 9 -3)`
          * GET `74` because that's the sum of those 4 numbers.
          * LISP works.
          * Type `(quit)` to exit.
          * You can learn more about this language in [LISP](/subjects/lisp)

        Additional commands:

          * Type `apt-cyg show clisp` to see information about the clisp package.
      id: cygwin_basics_2
      prerequisites: cygwin_basics_1
      title: Install Cygwin Application
    - description: |
        There is a nice application called [apt-cyg](https://github.com/transcode-open/apt-cyg) that can allow you to install
        applications (or packages) from the BASH shell. But you need to install it.

        * Start the BASH shell (i.e. run the "Cygwin.bat") program.
        * Run `wget rawgit.com/transcode-open/apt-cyg/master/apt-cyg`
        * Run `install apt-cyg /bin`

        At this point, you should be able to install a package from the command line. Let's find out.

        * Suppose you want to install the [nano](https://www.nano-editor.org/) text editor. This editor appears on most Linux distros.
        * Type `apt-cyg searchall nano` to see all the packages that have some relation to nano.
        * You can see that `nano` appears in the list.
        * Type `nano` at the terminal.
        * If something loads up, then you know it's already installed. Hit CTRL-X to quit.
        * Otherwise, you could just type `apt-cyg install nano`
        * Type `nano myfile.txt` at the terminal.
        * Enter some text, like "Once upon a time..."
        * Type CTRL-X, Y, ENTER to save this file.
        * You should be out of the editor and back to the terminal.
        * Type `ls -la`. You should see something like this below with `myfile.txt` in the list.
        * You just created a file. Type `nano myfile.txt` to edit it again if you want to make changes and save it.

        ```dos
        total 1579855
        drwxr-xr-x 1 rob None          0 Sep  5 16:44 .
        drwxrwxrwt 1 rob None          0 Sep  5 11:42 ..
        -rwxr-xr-x 1 rob None       1494 Aug 30  2022 .bash_profile
        -rwxr-xr-x 1 rob None       5645 Aug 30  2022 .bashrc
        -rwxr-xr-x 1 rob None       1919 Aug 30  2022 .inputrc
        -rwxr-xr-x 1 rob None       1236 Aug 30  2022 .profile
        -rw------- 1 rob None          7 Sep  5 12:33 .python_history
        -rw-r--r-- 1 rob None        215 Sep  5 13:26 .wget-hsts
        -rw-r--r-- 1 rob None      13765 Sep  5 13:26 apt-cyg
        -rwxr-xr-x 1 rob None         17 Sep  5 16:44 myfile.txt
        ```

        * Type `cat myfile.txt` in the terminal to list out the contents of the file.
      id: cygwin_basics_3
      prerequisites: cygwin_basics_2
      title: Install apt-cyg tool
    description: |
      In this course, you'll:

      * Download Cygwin
      * Install it
      * Run it
      * Install applications
      * Run applications
    id: cygwin_basics
    short: Install and use this environment
    title: Install and Use Cygwin
  description: |
    Unix and Linux have produced so many great tool, like the GCC compiler, X Windows, Emacs, the Bash Shell, and all the free
    software that comes with it, that Cygwin was invented in the late 1990's to let Windows users capitalize on these tools. The
    alternative was to dual-boot Linux, or run it on another machine.

    This was so popular that Microsoft later created [WSL](/subjects/wsl) in 2016 to allow Windows users to use Linux while in
    Windows and without using a third-party hypervisor; e.g. VMWare, VirtualBox, or QEMU.
  id: cygwin
  links:
  - url: https://www.cygwin.com/
  - url: https://en.wikipedia.org/wiki/Cygwin
  - text: Search the repository of packages that you can install.
    url: https://cygwin.com/packages/
  - text: https://arefiles.ucdavis.edu/uploads/filer_public/a5/5b/a55b1e54-153e-4f6d-802c-4a6787cf32ed/installing__using_cygwinx.pdf
    url: Installing & Using Cygwin/X
  parents: installers
  purpose: |
    * Learn that such a tool exists.
    * Create an run a Hello World program in C or C++ or Fortran or Ada just to say that you did.
    * Learn a little about Bash tools, like grep, awk, and sed and why you might call yourself a real hacker if you know them.
  short: The Cygwin unix-like environment that runs on Windows.
  title: Cygwin
- description: ''
  id: mingw
  links:
  - text: What is the difference between Cygwin and MinGW?
    url: https://stackoverflow.com/questions/771756/what-is-the-difference-between-cygwin-and-mingw
  parents: installers
  short: The MinGW unix-like environment that runs on Windows.
  title: MinGW
- description: '"MinGW: A native Windows port of the GNU Compiler Collection (GCC),
    with freely distributable import libraries and header files for building native
    Windows applications; includes extensions to the MSVC runtime to support C99 functionality.
    All of MinGW''s software will execute on the 64bit Windows platforms."

    '
  id: msys
  links:
  - text: Software Distribution and Building Platform for Windows
    url: https://www.msys2.org/
  parents: installers
  short: Minimalist GNU for Windows
  title: MSYS2
- id: os
  short: General overview of operating systems with emphasis on Windows and Linux
  title: Operating Systems
- courses:
  - assignments:
    - acceptance: |
        * WHEN I start a command console (cmd)
        * AND I run `qemu-system-x86_64 --machine help`
        * THEN I see a list of machines that the x86_64 system supports.
      description: |
        * `scoop install qemu`
        * Get folder "C:\sofia\scoop\apps\qemu"
        * Add that folder to your local environment PATH variable.
        * Create a new folder "C:\sofia\qemu" where you can put other images you download and configurations.
      id: qemu_install_1
      title: Install QEMU using Scoop
    description: Install the software
    id: qemu_install
    title: Install QEMU
  - description: |
      * Download from https://sourceforge.net/projects/rpiqemuwindows/
      * Extract to apps folder; e.g. "qemu"
      * Perhaps rename "qemu" to "rpi_emulator" to keep is less confusing.
    id: qemu_rpiemulator
  - description: "* Download \"amd64\" from https://www.debian.org/CD/netinst/\n*\
      \ You file will be something like `debian-12.1.0-amd64-netinst.iso`\n* Run `qemu-img.exe\
      \ create debserv.img 20G \u2013f raw`\n* Run `qemu-system-x86_64 -m 1024 -nic\
      \ user -boot d -cdrom debian-12.1.0-amd64-netinst.iso -hda debserv.img -display\
      \ gtk`\n* Choose \"Install\"\n"
    id: qemu_debianserver
  - description: "* Download [TinyCore](http://tinycorelinux.net/14.x/x86/release/TinyCore-current.iso)\
      \ from http://tinycorelinux.net/downloads.html\n* Run `qemu-img.exe create tinycore.img\
      \ 10G \u2013f raw` to create a virtual file system.\n* Run `qemu-system-x86_64\
      \ -m 512 -boot d -cdrom TinyCore-current.iso -hda tinycore.img -display gtk`\n\
      * See the running GUI\n"
    id: qemu_tinycore
  - description: "* Download ISO from http://repo.linuxliteos.com/linuxlite/isos/6.6/\n\
      * Run `qemu-img.exe create linuxlite.img 10G \u2013f raw` to create a virtual\
      \ file system.\n* Run `qemu-system-x86_64 -m 1024 -boot d -cdrom linux-lite-6.6-64bit.iso\
      \ -hda linuxlite.img -display gtk`\n"
    id: qemu_linuxlite
  - description: "* Download ISO from https://antixlinux.com/download/\n* Run `qemu-img.exe\
      \ create anitx.img 10G \u2013f raw` to create a virtual file system.\n* Run\
      \ `qemu-system-x86_64 -m 1024 -boot d -cdrom antiX-23_x64-full.iso -hda anitx.img\
      \ -display gtk`\n* Choose \"Boot from hard disk\"\n* HANGS!\n"
    id: qemu_anitx
  - description: "* Download alpine linux from https://alpinelinux.org/downloads/\
      \ choosing \"Standard\", \"x86_64\"\n*\n`qemu-system-x86_64 -m 512 -nic user\
      \ -boot d -cdrom alpine-standard-3.18.3-x86_64.iso -hda alpine.qcow2 -display\
      \ gtk`\n\n\n  * Download the Raspberry Pi OS (formerly called \"Raspbian\")\
      \ image (img) file from https://www.raspberrypi.com/software/operating-systems/\n\
      \    * For this example, I chose \"Raspberry Pi OS Lite\"\n  * Download a kernel\
      \ from https://github.com/dhruvvyas90/qemu-rpi-kernel\n  * Create\n  ```dos\n\
      \  qemu-img.exe create rpi.img 20G \u2013f raw\n  ```\n  * GET: `Formatting\
      \ 'rpi.img', fmt=raw size=21474836480`\n  * Run `qemu-system-arm -kernel kernel-qemu-4.4.34-jessie\
      \ -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append \u201C\
      root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash\" -drive \u201Cfile=bullseye.img,index=0,media=disk,format=raw\"\
      \ -redir tcp:2222::22\"`\n  * Run `qemu-system-arm -cpu help`\n"
    id: qemu_alpine
  description: 'QEMU is a machine (or CPU) simulator for your laptop. If you want
    to run

    '
  id: qemu
  parents: os
  short: Machine Emulator
  title: Quick Emulator (QEMU)
- id: linux
  parents: os
  short: Linux is a free version competitor of Microsoft Windows and Apple iOS. Most
    web sites run on Linux today.
  title: Linux
- courses:
  - id: wsl_install
    links:
    - https://learn.microsoft.com/en-us/windows/wsl/install
    - text: The Ubuntu version of WSL
      url: https://ubuntu.com/wsl
    - text: How to Install the Windows Subsystem for Linux on Windows 11
      url: https://www.howtogeek.com/744328/how-to-install-the-windows-subsystem-for-linux-on-windows-11/
    title: How to install WSL2 on your laptop.
  description: |
    This section assumes that you have permissions to install WSL.
    Your school might not allow it on their machines (e.g a laptop you are borrowing) since it can allow you to bypass
    tbe Windows Firewall in clever ways. But for you own machines at home, or your own personal device, WSL can get you started
    in Linux very quickly.
  id: wsl
  links:
  - text: Windows Subsystem for Linux Documentation
    url: https://learn.microsoft.com/en-us/windows/wsl/
  - text: WSL 2 bypasses the Windows firewall
    url: https://www.bleepingcomputer.com/news/microsoft/windows-subsystem-for-linux-2-bypasses-the-windows-10-firewall/
  parents: linux installers
  short: If you have a machine with Windows on it, this is the fastest way to get
    up an running with Linux
  title: Windows Subsystem for Linux
- courses:
  - assignments:
    - acceptance: |
        * You shared your IP address with another user, and vice versa.
        * You ping'ed another machine.
        * You know your computer name.
        * You know the names of other machines.
      description: |
        Find a desktop that is connected to the network, or ideally a wireless router.
        That's your server. You are part of the network. The only thing that separates a "server" from a "desktop" or "laptop"
        is how humans physically interact with it.

        * **desktop** - it sits on a desk, or under it, and might use WiFi, but might have a cable.
        * **laptop** - it sits on your lap and most likely connects to the network with WiFi.
        * **server** - it might not have a keyboard, display, or mouse, and you might leave it on all the time, and it might be expensive.

        Seriously, these are all computers and they are connected to the network via TCP/IP. Therefore, we have ourselves a network.

        The lab does have an expensive machine in the cabinet (we call a server) and a bunch of desktops, but they all do the same thing.
        We might as well be talking about trucks, cars, vans, and 18-wheelers. They all drive on the road and move things.

        In this assignment, determine your server's unique identity. We'll assume you are a Windows desktop.

        ## Step 1

        Run this:

        ```
        ipconfig /all
        ```

        It might show you a bunch of sections, one for each network adapter you have. Look for the one that contains **Default Gateway**.
        That is the adapter that is actually connected to the network. It might look like this:

        ```
        Wireless LAN adapter Wi-Fi:

          Connection-specific DNS Suffix  . :
          Description . . . . . . . . . . . : Intel(R) Centrino(R) Ultimate-N 6300 AGN
          Physical Address. . . . . . . . . : 3C-A9-F4-8B-D5-1C
          DHCP Enabled. . . . . . . . . . . : Yes
          Autoconfiguration Enabled . . . . : Yes
          Link-local IPv6 Address . . . . . : fe80::44d0:9266:e8f4:34cc%16(Preferred)
          IPv4 Address. . . . . . . . . . . : 192.168.1.2(Preferred)
          Subnet Mask . . . . . . . . . . . : 255.255.255.0
          Lease Obtained. . . . . . . . . . : Friday, February 02, 2024 6:29:33 PM
          Lease Expires . . . . . . . . . . : Wednesday, February 14, 2024 6:41:37 AM
          Default Gateway . . . . . . . . . : 192.168.1.1
          DHCP Server . . . . . . . . . . . : 192.168.1.1
          DHCPv6 IAID . . . . . . . . . . . : 222079476
          DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-22-94-97-A9-3C-A9-F4-8B-D5-1C
          DNS Servers . . . . . . . . . . . : 192.168.1.1
          NetBIOS over Tcpip. . . . . . . . : Enabled
        ```
        The **IPv4 Address** address (ex: **192.168.1.2**) is unique to your machine. Another computer on the same network will have
        a different IP address.

        ## Step 2

        Run:
        ```
        echo %COMPUTERNAME%
        ```

        This will show you your computer name. This does not have to be unique, but it would be confusing otherwise. So they typically
        are unique. They exist to help humans.

        ## Step 3

        Find your neighbors IP address (call it NEIGHBORIP). Then run:
        ```
        ping NEIGHBORIP
        ```

        Hopefully you don't see "Request timed out" or "Destination host unreachable."
        You should be able to see a TTL (Time To Live) of some number.

        ## Step 4

        To see all the computers on your network, run:
        ```
        net view
        ```
        ## Step 5

        Pick any computer (e.g. ANYNAME) and run:
        ```
        ping ANYNAME
        ```

        This is just another way to ping a machine - by name instead of IP address.
      id: networks1_1
      short: Prove that your desktop really is a network node and can act as a server.
      title: You, the server.
    - description: |
        Your desktop machine is on the network. So you should be able to make your own web server that serves up your web content
        for others on the network to see.

        A **web site** can be little more than a folder with one "index.html" file in it, and served up by a programmed called a web server.
        So let's do that.

        ## Step 1 - create web site folder

        * Create a folder (e.g. "MyWebSite")
        * Use some file editor (e.g. Notepad or Visual Code) to create a file named `index.html` and add some text to it. Maybe HTML like this:

        ```html
        <h1>My Web Site</h1>
        Welcome.
        ```

        ## Step 2 - start web server

        * Open the command console and change to that folder.
        * Assuming you have Python 3 installed, run this command:

        ```
        python -m http.server
        ```

        ## Step 3 - open web site in browser

        Then open this URL in your browser: http://localhost:8000

        ## Options

        Then try these URLs. They are different ways to do the same thing:

        * http://192.168.0.1:8000/
        * http://COMPUTERNAME:8000/

        If you want to specify another folder (rather than the one the server is running in), or change the port:
        ```
        python3 -m http.server 8080 --directory /path/to/your/folder
        ```
      id: networks1_2
      short: Run a web site on your server that someone else can hit
      title: Create Web Server
    - description: ''
      id: networks1_3
      short: Create a web site with SQL injection
      title: Create a Hackable Web Server
    description: |
      Our computer lab has many desktop computers, each connected to a router. Therefore, each has a unique IP address and optionally
      a human-readable computer name associated with it.
    id: networks1
    short: Build a network in class with your team mates. It might already be done
      for you.
    title: Build a Network
  description: 'Two or more computers connected to each other.

    '
  id: networks
  short: Two or more computers connected to each other.
  title: Networking
- description: |
    The [TIOBE](https://www.tiobe.com/tiobe-index/) index will show which programming languages are the most popular in the world.

    Some languages that might be fun for the class to explore:

    * Assembly Language (x86)
    * APL
    * Erlang
    * Forth
    * Haskell
    * Julia
    * Prolog
    * Rust
  id: programming
  links:
  - text: TIOBE Index
    url: https://www.tiobe.com/tiobe-index/
  - text: GitHut 2.0 - language stats from Github.
    url: https://madnight.github.io/githut/#/pull_requests/2023/2
  - text: Statistics Times - Top Computer Languages
    url: https://statisticstimes.com/tech/top-computer-languages.php
  - text: Github topics, organized and searchable
    url: https://github.com/topics
  - text: PYPL PopularitY of Programming Language - created by analyzing how often
      language tutorials are searched on Google.
    url: https://pypl.github.io/PYPL.html
  - text: Most Popular Programming Languages for Engineers
    url: https://careerkarma.com/blog/best-programming-languages-for-engineers/
  - text: Are All Programming Languages In English?
    url: https://dataoverhaulers.com/programming-languages-in-english/
  short: There are over 1000 programming language in use today and you can use most
    of them for free.
  title: Programming Languages
- id: replit
  links:
  - https://replit.com
  - text: A similar Microsoft site for .NET languages.
    url: https://dotnet.microsoft.com/en-us/languages
  - text: How we went from supporting 50 languages to all of them
    url: https://blog.replit.com/nix
  parents: programming
  short: |
    Use this site to try out over 50 different programming languages without having to install any locally.
    Just type your code in a press Run.
    It's a quick way to perform experiments and satisfy your immediate curiosity.
  tags: web
  title: Repl.it
- description: 'YAML (short for Yet Another Markup Language) is often known as human-readable
    JSON. Anything you can do with JSON, you can do with

    '
  id: yaml
  links:
  - https://en.wikipedia.org/wiki/YAML
  - text: Official YAML Web Site
    url: https://yaml.org/
  - text: What is YAML?
    url: https://www.redhat.com/en/topics/automation/what-is-yaml
  parents: programming
  short: This is a human readable JSON text format. This web site encodes all its
    subjects, courses, and assignments in YAML.
  title: Yet Another Markup Language
- courses:
  - assignments:
    - description: 'Get Python 3.11 (or the latest version) installed on your laptop.

        '
      id: InstallPython
      title: Install Python3
    - acceptance: null
      description: null
      id: InstallPythonForWindows
      steps: null
      title: For Windows
    - acceptance: |
        Verify that python 3 is installed.

        * GIVEN I am at a Linux terminal
        * WHEN I run
        ```bash
        python --version
        -or-
        python3 --version
        ```
        * THEN I see:
        ```
        Python 3.11.4
        ```
      description: 'You will get Python installed in your Linux environment, which
        we assume is WSL.

        '
      id: InstallPythonForLinux
      links:
      - description: Find, install and publish Python packages with the Python Package
          Index
        text: The Python Package Index (PyPI)
        url: https://pypi.org/
      - text: Python 3.11 Released! How to Install in Ubuntu 22.04 | 20.04 | 22.10
        url: https://ubuntuhandbook.org/index.php/2022/10/python-3-11-released-how-install-ubuntu/
      - text: Everything Important You Need to Know About Hard Link in Linux
        url: https://linuxhandbook.com/hard-link/
      - text: How do I create a permanent Bash alias?
        url: https://askubuntu.com/questions/17536/how-do-i-create-a-permanent-bash-alias
      prerequisites: wsl
      steps: |
        Assuming you are at a Linux terminal, run:
        ```bash
        sudo add-apt-repository ppa:deadsnakes/ppa
        sudo apt -y install python3.11
        -or-
        sudo apt -y install python3.11-full
        ```

        Run `python3.11 --version` to see the detailed version. This tells you that python 3.11 is installed.
        But we typically only want to use one version of python. The command `python` defaults to the 2.7 version, but that's
        so obsolete that we can forget about using it anymore.

        Run `python3 --version` to see the version. If you see a version other than 3.11,
        then you have two python 3 versions installed. If so, you can run  `which python3` to see which folder the
        python3 is in. Let's assume it returns `/usr/bin/python3`. Now type `ls -la /usr/bin | grep python`.
        This returns a list of files in that folder. Look for a lines like this (not necessarily in this order):

        ```
        -rwxr-xr-x  1 root   root      7134808 Jun  7 05:45 python3.11
        lrwxrwxrwx  1 root   root            9 Mar 13  2020 python3 -> python3.8
        ```

        The first line tells us that `python3.11` is installed.

        In the second line, the first letter `l` means hard link, and you'll see a ` -> ` in the description. It says that the command `python3`
        is pointing to `python3.8`.

        Regardless, we can create any aliases we want. Run `nano ~/.bash_aliases` to edit (or create) an aliases file.
        Add to this file, the following lines and save:
        ```
        alias python3=python3.11
        alias python=python3.11
        ```

        Now run `. ~/.bashrc` to reload that `~/.bashrc` file.
      title: For Linux (wsl, Ubuntu)
    - assignments:
      - acceptance:
        - do: |
            From the command line, run:
            ```
            python -c "exec(\"import sys\nfor r in range(10): print(f'--> [{r}]')\")"
            ```
          get: null
        description: |
          For the Data Science subject, many courses use Jupyter, Pandas, and Matplotlib.
          Here you install those libraries and then verify they work.
        id: InstallPythonAssignment
        references:
        - url: https://pip.pypa.io/en/stable/getting-started/
        steps: |
          ```
          python -m pip install --upgrade pip
            -> Python 3.11.0
          pip install jupyter scipy numpy pandas matplotlib gmpy2 pyyaml flask markdown
          ```
        title: Install Python
      description: |
        Python is great because there are 400,000 libraries out there that do just about everything you could want to do in Python.
        It is easy to create a new library for others to use.
        Learn:
        * What types of libraries are out there and how they are organized; e.g. games, math, databases,...
        * How to search for any existing library and how to install it.
      id: InstallLibraries
      prerequisites: InstallPython
      title: Install Python Libraries
    description: Get a working environment where you can execute Python code; e.g.
      install locally or use an online environment.
    id: PythonBasics
    title: Python Basics
  - description: Very simple coding tools, such as input, process, output to the console.
      Define functions and use libraries.
    id: PythonCode
    title: Python Coding
  - description: |
      In this course, you clone a repo that has a minecraft simulated environment written in Python using OpenGL.
      It's only about 1000 lines of code.

      ![minecraft](/static/images/minecraft.png)

      ## Steps

      ```dos
      c:
      cd \csc
      git clone https://github.com/robertscotthoward/minecraft.git
      cd minecraft
      pip install pyopengl pyglet==1.5.27
      python Minecraft.py
      ```

      This loads MyCode.py by default, but you can run other files by adding the name of the file to the command line; e.g.

      ```dos
      python Minecraft.py MyCodeLetters
      ```


      ## Hotkeys

      * `W`, `S`, `A`, `D` for standard Minecraft movement.
      * `1`, `2`, `3` to change the stone to place. There are only three types of blocks you can place in this demo.
      * `LEFT CLICK` remove a stone at the cursor.
      * `RIGHT CLICK` add a stone at the cursor.
      * Mouse to pan and scroll.
      * `TAB` toggle flying. When flying, just point in the air and move. No double-space click needed.
      * `SPACE` to jump.
      * `ESCAPE` to exit window.
      * `C` clear the board and reset.
      * `L` to reload the file. Expect a pause while rendering.
      * `H` to teleport back home; i.e. the default starting position and direction.
      * `M` generate hills. Expect a pause while rendering.
      * `R` same as these three key: `H` `C` `L`
      * `Q` quit.
    id: PythonMinecraft
    prerequisites: InstallPython
    title: Programming Minecraft with Python
  description: |
    Python is:

    * The most popular language taught in universities. According to [Google Searches for Tutorials](https://pypl.github.io/PYPL.html) Python is now the most popular language in the world
      pushing Java into second place.
    * The #1 language to teach computer science. It used to be Pascal or C.
    * [Multi-paradigm](https://en.wikipedia.org/wiki/Programming_paradigm), such as imperative, procedural, object oriented, functional
    * About 500,000 open source projects and libraries in Python available for free.
    * Recently surpassed R as the data science toolkit to know.
    * Used in machine learning and scientific research and simulation.
  id: python
  parents: programming
  purpose: '...

    '
  short: Python is perhaps the most taught language in school these days. This site
    is built with it. There is very little you cannot do with Python.
  title: Python Programming Language
- id: rust
  parents: programming
  short: You know, cargo
  title: Rust Programming
- id: dotnet
  links:
  - text: Top 3 .Net Framework Trends to Follow in 2021
    url: https://aristeksystems.com/blog/top-3-dot-net-framework-trends-2021/#what-id-dot-net
  - text: What is .NET?
    url: https://dotnet.microsoft.com/en-us/learn/dotnet/what-is-dotnet
  - text: What is .NET? Introduction and overview
    url: https://learn.microsoft.com/en-us/dotnet/core/introduction
  - text: List of .NET Programming Languages
    url: https://en.wikipedia.org/wiki/Category:.NET_programming_languages
  parents: programming
  short: |
    The .NET runtime environment has greatly jumped in popularity since Microsoft made the environment open source in 2016.
    Practically any programming language can be written to compile to .NET. Your Windows 10 laptop most likely has
  title: .NET Runtime Environment
- id: csharp
  parents: dotnet
  short: C# is the most popular .NET programming language. The demand for C# programmers
    has now exceeded Java programmers.
  title: C# Programming
- courses:
  - description: null
    id: install_ros
    links:
    - https://github.com/roswell/roswell
    prerequisites: scoop
    title: There is a nice system for install LISP these days; roswell (or just ros).
  description: 'Lisp (or List Processing) is an old language

    '
  id: lisp
  links:
  - text: Reasons to learn Common LISP
    url: https://www.gnu.org/software/clisp/propaganda.html
  - text: How to Set Up a Common Lisp IDE in 2021
    url: https://towardsdatascience.com/how-to-set-up-common-lisp-ide-in-2021-5be70d88975b
  parents: programming
  purpose: ''
  short: null
  title: LISP Programming
- id: web
  short: All things HTML, CSS, and JavaScript; plus dynamic site generation and hosting.
  title: Web Development
- description: |
    StackBlitz is one of the coolest sites I've seen.
    You can scaffold up a working website in seconds, and then share it with your friends.
    This could be used for sophomore IDL projects.
  id: stackblitz
  parents: web
  title: StackBlitz Online Dev Site
- id: bootstrap
  links:
  - text: Build fast, responsive sites with Bootstrap
    url: https://getbootstrap.com
  - text: Flask Bootstrap Templates - Open-Source Starters
    url: https://blog.appseed.us/flask-template-bootstrap-open-source-starters/
  parents: web
  title: Bootstrap CSS and JS web site styles
- description: |
    Flask is a powerful web framework that runs in Python.
    It is also easy to learn and similar to Node's [express](https://expressjs.com/) framework.

    Some pluses to using Flask:

    * Since it's Python, you can capitalize on your current understanding to evolve the project.
    * For $5/month, you can deploy your application to https://pythonanywhere.com where it runs 24x7 in the public domain.
    * All the libraries that Python can access are at your disposal; e.g. Markdown, Matplotlib, Numpy, Jupyter, and Pandas.
  id: flask
  links:
  - text: Main Flask Home Page
    url: https://pypi.org/project/Flask/
  - text: Flask Documentation
    url: https://flask.palletsprojects.com/en/2.3.x/
  - text: Create Python Web Apps with Flask and Replit
    url: https://nickymarino.com/2021/04/13/create-python-web-apps-with-flask-and-replit/
  - text: Flask User Guide
    url: https://flask.palletsprojects.com/en/2.3.x/
  - text: The Art of Routing in Flask
    url: https://hackersandslackers.com/flask-routes/
  parents: web
  prerequisites: InstallPython
  purpose: |
    * Learn about programmatically generating HTML to make a dynamic interactive web site.
    * Use this site as a working example of what Flask can do.
  short: This python web engine/framework is what this site is running on. Build dynamic
    web sites quickly with Flask.
  title: Flask
- id: this_web
  parents: flask yaml github
  prerequisites: InstallPython
  short: Learn how to help evolve this site by creating subjects, courses, assignments,
    and exams.
  title: Contributing to this school web site
- id: math
  short: |
    Mathematics is very interesting and fun if you do it right.
    All university science majors and engineering professions require it as the language.
    You'll get lots of math in your school, but this club concentrates on using computers to understand and solve problems.
    This subject is less about how to solve math problems and more about what types of problems are there that can make a
    business profitable, and what types of tools exist that can solve them.
  title: Mathematics
- description: 'Tensors are a generalization of matrices to higher dimensions. They
    are used in physics, engineering, and computer science.

    '
  id: tensors
  parents: math
  title: Tensors
- id: linearalgebra
  parents: math
  short: 'Linear algebra is the branch of mathematics concerning linear equations
    such as linear functions and their representations through matrices and vector
    spaces.

    '
  title: Linear Algebra
- id: mathapps
  parents: math
  short: A list of popular math tools.
  title: Mathematical Software and Applications
- id: octave
  links:
  - url: https://octave.org/
  parents: mathapps
  short: Scientific Programming Language
  title: GNU Octave
- id: sagemath
  links:
  - https://www.sagemath.org/
  - https://en.wikipedia.org/wiki/SageMath
  parents: mathapps
  short: |
    System for Algebra and Geometry Experimentation is a free application that can solve problems as well as Mathematica.
    No only can it give you the number to a solution, it can give your function that solves a Calculus problem.
  title: SageMath
- id: BLAS
  links:
  - https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms
  parents: mathapps
  short: |
    BLAS is used for high-speed computations and A.I. We'll see where this course goes in depth,
    but a 30-minute understanding of this tool is important for future engineers.
  title: Basic Linear Algebra Subprograms
- id: matlab
  links:
  - https://en.wikipedia.org/wiki/MATLAB
  - https://www.mathworks.com/products/matlab.html
  - text: MATLAB for Artificial Intelligence
    url: https://www.mathworks.com/
  parents: mathapps
  short: |
    MATLAB is a programming platform designed specifically for engineers and scientists to analyze and design systems and products.
    The heart of MATLAB is the MATLAB language, which is a matrix-based language that allows for the most natural expression
    of computational mathematics. MATLAB allows for matrix manipulations, plotting of functions and data, implementation of
    algorithms, creation of user interfaces, and interfacing with programs written in other languages.
    It is widely used by engineers and scientists worldwide for a range of applications, including deep learning and machine learning,
    signal processing and communications, image and video processing, control systems, test and measurement, computational finance,
    and computational biology
  title: MATLAB
- description: 'With all the great tools today (Python, R, Mathematica, SageMath)
    prob and stats are much easier to use.

    '
  id: statistics
  links:
  - short: I found this site well done.
    text: A visual introduction to probability and statistics
    url: https://seeing-theory.brown.edu/index.html
  parents: math
  title: Probability and Statistics
- id: fem
  links:
  - text: Main Wiki Page
    url: https://en.wikipedia.org/wiki/Finite_element_method
  - text: List of software packages
    url: https://en.wikipedia.org/wiki/List_of_finite_element_software_packages
  - short: Still complex, but the general overview is interesting.
    text: Simple Finite Element Python
    url: http://sfepy.org/doc-devel/documentation.html
  parents: math
  short: |
    Engineers and scientists use this mathematical method to break down complicated physical systems into many (but finite)
    smaller simpler parts (or elements) where each element acts the same way.
  title: Finite Element Methods
- id: datascience
  links:
  - url: https://www.analyticsvidhya.com/blog-archive/
  short: |
    All science degrees at the university will require basic fluency in data acquisition and generating charts.
    Excel was a popular tool of the past, but Jupyter Notebooks are the current hot thing.
    Basic understanding of statistics and proving one's hypothesis is paramount.
  title: Data Science
- description: |
    Here is a list of places where you can get free data; typically tablular in the form of CSV (comma-separated values),
    TSV (tab-separated values), or Excel files.
  id: datasources
  links:
  - short: 250K searchable data sets publicly available.
    text: The Home of the U.S. Government's Open Data
    url: https://data.gov/
  - short: |
      Kaggle is the world's largest data science and machine learning community.
      We provide powerful tools and resources like customizable Jupyter notebooks, public datasets and machine learning competitions
      to help you achieve your data science goals.
    text: null
    url: null
  - short: Unify tens of thousands of different repositories for datasets and make
      that data discoverable for everyone.
    text: Google Data Search Engine
    url: https://datasetsearch.research.google.com/
  - short: Free and open access to global development data. The World Bank funds initiatives
      in underdeveloped nations on a regular basis, then collects statistics to track
      their success.
    text: World Bank Open Data
    url: https://data.worldbank.org/
  - short: This is a list of topic-centric public data sources in high quality. They
      are collected and tidied from blogs, answers, and user responses. Most of the
      data sets listed below are free, however, some are not.
    text: Awesome Public Datasets
    url: https://github.com/awesomedata/awesome-public-datasets
  - short: A website dedicated to the distribution of data sets from scholarly studies.
      It contains a plethora of intriguing data sets.
    text: Making over 127.15TB of research data available
    url: https://academictorrents.com/
  - short: |
      The UCI Machine Learning Repository is a collection of databases, domain theories, and data generators that are used by the machine learning
      community for the empirical analysis of machine learning algorithms.

      The archive was created as an ftp archive in 1987 by UCI PhD student David Aha. Since that time,
      it has been widely used by students, educators, and researchers all over the world as a primary source of
      machine learning datasets.
    text: UC Irvine Machine Learning Repository
    url: https://archive.ics.uci.edu/datasets
  - short: |
      The MNIST database of handwritten digits, available from this page, has a training set of 60,000 examples,
      and a test set of 10,000 examples. It is a subset of a larger set available from NIST.
      The digits have been size-normalized and centered in a fixed-size image.
      It is a good database for people who want to try learning techniques and pattern recognition methods on real-world data
      while spending minimal efforts on preprocessing and formatting.
    text: THE MNIST DATABASE of handwritten digits
    url: http://yann.lecun.com/exdb/mnist/
  - short: |
      Character recognition is a classic pattern recognition problem for which researchers have worked since the early days of computer vision.
      With today's omnipresence of cameras, the applications of automatic character recognition are broader than ever.
      For Latin script, this is largely considered a solved problem in constrained situations,
      such as images of scanned documents containing common character fonts and uniform background.
      However, images obtained with popular cameras and hand held devices still pose a formidable challenge for character recognition.
      The challenging aspects of this problem are evident in this dataset.
    text: The Chars74K dataset - Character Recognition in Natural Images
    url: http://yann.lecun.com/exdb/mnist/
  - text: Face Databases
    url: http://web.mit.edu/emeyers/www/face_databases.html
  - short: Datasets for Data Science, Machine Learning, AI & Analytics
    text: KD Nuggets
    url: https://www.kdnuggets.com/datasets/index.html
  - short: |
      DataPortals.org is the most comprehensive list of open data portals in the world.
      It is curated by a group of leading open data experts from around the world - including representatives from local,
      regional and national governments, international organisations such as the World Bank, and numerous NGOs.
    text: A Comprehensive List of Open Data Portals from Around the World
    url: http://datacatalogs.org/
  - short: 'Billions of multidisciplinary, global statistics for research and instruction

      '
    text: Sage Data
    url: https://data.sagepub.com/
  - text: 25 Open Datasets for Deep Learning Every Data Scientist Must Work With
    url: https://www.analyticsvidhya.com/blog/2018/03/comprehensive-collection-deep-learning-datasets/
  parents: datascience
  short: A list of places where you can find data sources online. Great for data science
    projects.
  title: Data Sources
- id: python_datascience
  parents: datascience
  short: Python is a complete data science toolkit.
  title: Python Data Science
- id: numpy
  parents: math python_datascience
  short: 'Numpy is the python equivalent to BLAS and MATLAB.

    '
  title: Numpy
- description: |
    Jupyter Notebooks are convenient ways to mix code, documentation, and graphs into a single text file - called a notebook.
    Much like a spreadsheet, a notebook displays the current state of the runtime.
    If you change an input variable, the entire document changes accordingly.
  id: jupyter
  links:
  - text: Jupyter Home
    url: https://jupyter.org/
  parents: python_datascience
  prerequisites: InstallPython
  purpose: 'Reproducible Research.

    '
  short: Fundamentals of reproducible research and data science. Jupyter is a free
    substitute for R, Knitr, PDF generation, and Mathematica.
  title: Jupyter Notebooks
- description: 'Pandas is Python''s most popular data science toolkit library. It
    is a more declarative replacement for Excel.

    '
  id: pandas
  links:
  - text: W3Schools Tutorial
    url: https://www.w3schools.com/python/pandas/default.asp
  - text: Getting started
    url: https://pandas.pydata.org/pandas-docs/stable/getting_started/index.html
  - text: Panda's API Reference
    url: https://pandas.pydata.org/pandas-docs/version/1.3/reference/
  - short: For those of you who want to cook pandas.
    text: Panda's Cookbook
    url: https://pandas.pydata.org/pandas-docs/stable/user_guide/cookbook.html
  - text: Introduction to GeoPandas
    url: https://geopandas.org/en/stable/getting_started/introduction.html
  - text: GeoPandas Documentation
    url: https://geopandas.org/en/stable/docs.html
  - short: Intro video by Cesar Aguilar (5:45) for a free online course.
    text: The pandas DataFrame (Overview)
    url: https://realpython.com/lessons/pandas-dataframe-overview/
  parents: python_datascience
  prerequisites: InstallPython
  purpose: |
    * Become familiar with what pandas is and why it's important.
    * Use Pandas to create data plots and charts in Jupyter Notebooks.
  short: Pandas is the Python version of R language, and used by most Data Scientists
    today.
- courses: null
  id: matplotlib
  parents: python_datascience
  prerequisites: InstallPython
  short: This library is the Python version of R's GGPlot library.
- description: |
    Although Python is the #1 language in the world, R is now (2023) #16. It was and still is a great language for data science
    and statistics, but Python has since copied its functionality and made it simpler. Still, some data science / machine learning
    courses online use R instead of Python.
  id: R
  links:
  - url: https://en.wikipedia.org/wiki/R_(programming_language)
  - text: "Coursera (Johns Hopkins University) - The Data Scientist\u2019s Toolbox"
    url: https://www.coursera.org/learn/data-scientists-tools
  - text: Coursera Data Science Online Classes
    url: https://www.coursera.org/search?query=data%20science
  parents: datascience
  short: R is a complete data science toolkit, and pre-dates Python.
- description: |
    RStudio is an integrated development environment (IDE) for the R programming language, which is used for statistical computing and graphics.
    It is available in two formats: RStudio Desktop, which is a regular desktop application, and RStudio Server, which runs on a remote server
    and allows access to RStudio using a web browser.
    RStudio includes a console, syntax-highlighting editor that supports direct code execution, and tools for plotting, history,
    debugging, and workspace management.
    It is available in open source and commercial editions and runs on the desktop (Windows, Mac, and Linux).
    RStudio is widely used by data scientists and statisticians for developing statistical software and data analysis.
  id: RStudio
  links:
  - https://www.rstudio.com/categories/rstudio-ide/
  - https://en.wikipedia.org/wiki/RStudio
  parents: R
  short: R is a complete data science toolkit, and pre-dates Python
- description: |
    As an engineer or programmer, you will be using your keyboard a lot. It will be your number one tool of the production.
    Even if you are an electronic engineer, you will be writing specifications, bug reports, test programs, and general documentation.
    Using Office applications, like Libre Office or Microsoft Office, are quickly becoming antiquated in lieu of the more contemporary
    methods of changed tracking systems of collaborative development.

    The older generation might be comfortable using Microsoft Word to create documentation, such as a book, contract, or specification.
    But no one would use it to create programs right? They'd use an Interactive Development Environment (IDE), such as Visual Studio,
    VS Code, Eclipse, IntelliJ, JDeveloper, PyCharm, CodeBlocks or even Notepad++.

    Microsoft Word was primarily invented for a single person to create a single document that looks nice one the screen and prints
    out nicely. But here are some problems with it:

    * You must use Microsoft Word to read *.docx file; else you need to export/import them into other applications.
    * Although there are Track Changes in Word (recently), you cannot merge files easily and are required to save into many different files; one for each version and author.
    * Git does not see difference in docx files very well.
    * You need to decide what the theme and format of the document is as you write; e.g. clicking bold, font size, header styles, etc. This is similar to how HTML tags used to contain the formatting in it. Remember `<div font="arial" color="red" ...>`? No one does that any more. Rather, we split out the styles into CSS files, behavior into JS files, and use HTML5 hints that the UI will use. We leave it up to the user to decide how to view the document.

    Using a good editor, like Visual Code, has these advantages:

    * You specify the content in text, without specific formatting.
    * Git can track and merge changes from many users, and thus supports collaborative development.
    * These editors can be used to create just about any readable artifact.
  id: editors
  links:
  - text: Microsoft's Home Page for Visual Code
    url: https://code.visualstudio.com/
  - text: List of 10 features every developer should know about Visual Studio Code
    url: https://blog.cloudanalogy.com/10-features-of-vs-code-every-developer-should-know/
  - text: Keyboard Shortcuts Cheat Sheet
    url: https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf
  purpose: |2

    * Become very fluent in Visual Code - perhaps today's most popular Editor/IDE
  short: Text editors and Interactive Development Environements
  title: Editors and IDEs
- description: |
    I love using Visual Studio 2002 for .NET Development and C++, but if I had to choose exactly one editor to use for the rest of my life,
    it would be Visual Code (or VS Code or just Code). With this tool, I can literally do everything. It is practically its own operating system,
    much like Emacs used to claim decades ago. This entire site was built solely in VS Code - the Python Flask web site, HTML, CSS, (not much JavaScript),
    Markdown, YAML, and Git.

    It has these modern features:

    * Intellisense
    * Huge ever-growing number of extensions that can do anything you want.
    * Support for all languages; Python, Go, C, C++, C#, Ruby, HTML, CSS, JavaScript, LaTeX, Markdown, ... you name it.
    * Built-in debugging hooks; run and hit breakpoints.
    * Built-in Git workflow. Commit, Push, create Pull Requests, Rebase, ...
    * Free and Open-Source. Tons of code on GitHub. Incredible documentation. ChatGPT knows it well.
    * Can install in user mode, without admin permissions.
    * Cross platform: Windows, Linux, Max, Raspberry Pi
  id: vscode
  links:
  - text: Microsoft's Home Page for Visual Code
    url: https://code.visualstudio.com/
  - text: List of 10 features every developer should know about Visual Studio Code
    url: https://blog.cloudanalogy.com/10-features-of-vs-code-every-developer-should-know/
  - text: Keyboard Shortcuts Cheat Sheet
    url: https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf
  parents: editors
  purpose: |2

    * Install VS Code in user-mode so you can add any extension without consulting an administrator.
    * Know the primary productive tricks for getting things done.
    * Learn how to create these types of artifacts:
      * Web pages
      * Python Program
      * Markdown Documents and Books
      * Configuration Files: YAML, JSON, XML, INI
      * PDF Files
      * Mermaid Diagrams - create
    * Search, install, configure, and use plug-ins - this is actually quite easy.
    * Customize VS Code
  short: Text editors and Interactive Development Environements
  title: Microsoft Visual Code (not Visual Studio)
- description: |
    Writing documentation (e.g. in English) to be rendered in some electronic form (e.g. html, markdown, pdf) is more important
    than any other programming language. English is the most important programming language (at least in the USA) because it allows you to program
    computer programmers. Companies think so because they will pay you more if your ability to write coherent documentation is great.

    > Writing is nature's way of letting you know how sloppy your thinking is. - Dick Guindon

    I've also heard this sequitur:

    > Math is nature's way of letting you know how sloppy your writing is.
  id: documentation
  links:
  - text: 3 Writing Exercises Guaranteed to Make You a Better Engineer
    url: https://medium.com/codex/3-writing-exercises-guaranteed-to-make-you-a-better-engineer-cf8e88f6af2b
  - text: How Strong Writing Skills Benefit Your Career - PennState
    url: https://careerconnections.smeal.psu.edu/blog/2018/06/07/how-strong-writing-skills-benefit-your-career/
  purpose: |
    * Learn why good writing will make you a higher paid engineer.
    * Find resources that will help you become a better writer.
    * Discuss some general tricks for writing technical specifications.
  short: Tools for creating documentation.
  title: Documentation and Technical Writing
- description: |
    Much of the content on this web site is encoded in Markdown, including this description paragraph here.
    All documentation on Github and Wikipedia is down with Markdown.
    See the [Markdown Page](/pages/Markdown.md) for a demonstration of what can be done with Markdown.
  id: markdown
  parents: documentation
  short: Use a text editor to easily create web page content without dealing with
    HTML.
  title: Markdown Language for Documentation
- id: mermaid
  links:
  - text: Mermaid Home
    url: https://mermaid.js.org/intro/
  - text: Include diagrams in your Markdown files with Mermaid
    url: https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/
  parents: documentation
  short: Include diagrams in your Markdown files with Mermaid
  title: Create diagrams with just text.
- description: 'See [LaTeX](/pages/latex.md)

    '
  id: latex
  parents: documentation
  short: Include diagrams in your Markdown files with Mermaid
  title: LaTeX
- description: |
    I've once heard that an "Engineer" is a "Scientist" plus an "Economist".
    $$Engineer = Scientist + Economist$$
    As a scientist, you find solutions to physical problems.
    As an economist, you optimize the solutions to minimize cost.
  id: eng
  links:
  - short: Some blogs worth reading to improve your system design.
    text: Wikipedia - List of engineering branches
    url: https://en.wikipedia.org/wiki/List_of_engineering_branches
  - short: What is an engineer? Types of engineering.
    text: 'Types of Engineering: What Are They? Everything Explained'
    url: https://www.nu.edu/blog/types-of-engineering/
  - short: What types of engineering can you choose from? And how do they differ from
      one another?
    text: '50+ Types of Engineering Degrees: Which Is Right for You?'
    url: https://blog.prepscholar.com/different-types-of-engineering
  - short: Petroleum, Computer Hardware, and Aerospace being the top 3.
    text: Highest Paying Engineering Jobs Of 2023
    url: https://www.forbes.com/sites/andrewdepietro/2023/01/31/highest-paying-engineering-jobs-of-2023/?sh=2eb31f21768e
  - short: Some blogs worth reading to improve your system design.
    text: Tech Company Engineering Blogs
    url: https://github.com/JohnCrickett/SystemDesign/blob/main/engineering-blogs/README.md
  short: What are different engineering professions and articles pertaining to it?
  title: Engineering
- courses:
  - assignments:
    - acceptance: |
        * You should see something like this:

        ![](/static/images/20250123123151.png)

        -- or --

        ![](/static/images/nand2tetris-emulator.png)
      description: |
        * Follow the steps in [Download the Nand2tetris Software Suite](https://www.nand2tetris.org/software)
        * Or see [WEB IDE](https://nand2tetris.github.io/web-ide/chip/)
        * Run the IDE.
        * Get familiar with it.

        # General Architecture

        ![](/static/images/g51bA.png)

        # General Architecture High Level

        ![](/static/images/XaILN.png)

        # Arithmetic Logic Unit (ALU)

        ![](/static/images/n2talu1.png)
      id: logic_c1_a1
      title: Download the software IDE or use the web IDE
    - description: |
        Watch the introduction from the original authors:

        * [Unit 0.0 - Introduction](https://www.youtube.com/watch?v=LqirVc5SlW0&list=PLrDd_kMiAuNmSb-CKWQqq9oBFN_KNMTaI) - build the hardware.
          * 7 weeks, 6 projects, 1 computer, 0 prerequisites

        Pick one of the following course curricula:

        * [YouTube](https://www.youtube.com/watch?v=Mzy0RG9Z1Ak) - the course from [TeaLeaves](https://www.youtube.com/@TeaLeavesProgramming) channel.
        * [Coursera](https://www.coursera.org/learn/nand2tetris2) - a free course from Coursera
      id: logic_c1_a2
      title: Follow the course
    description: |
      Build a complete working computer from just NAND gates. You don't need a soldering iron or electronic parts.
      This is all done in a web-based [IDE](/subjects/editors) that you can also download and work in. See [WEB IDE](https://nand2tetris.github.io/web-ide/chip/).
      It completely simulates the computer
      using a language called Hardware Definition Language (HDL). After the language is written, it is easy to send it to a
      Field Programmable Gate Array (FPGA), which is a circuit that will run your code. HDL can also be burned on an
      Application Specific Integrated Circuit (ASIC) chip.

      See:

      * [The official website of Nand to Tetris courses](https://www.nand2tetris.org/)
      * [From Nand to Tetris In 12 Steps](https://www.youtube.com/watch?v=JtXvUoPx4Qs) - by Professor Shimon Schocken
      * [Nand to Tetris Book Notes](https://books.dwf.dev/docs/nand-to-tetris/introduction)
      * [Shimon Schocken: The self-organizing computer course](https://www.youtube.com/watch?v=iE7YRHxwoDs) - TEDx talk by Shimon Schocken
      * [Lots of videos by students to help](https://www.youtube.com/results?search_query=nand2tetris) - YouTube search for Nand2Tetris videos
    id: logic_c1
    title: NAND 2 TETRIS
  description: |
    Computers, CPUs, and logic circuits are a [IPO](/pages/IPO.md) graphs of logic gates, e.g. AND, OR, NOT, NAND, NOR, ...
    The The [NAND Gate](https://en.wikipedia.org/wiki/NAND_gate) is [Turing Complete](/subjects/turingmachines), which means you
    can create any computer in the world with just NAND gates. To prove this fact, a couple of smart computer professors
    (Nisan and Schocken) wrote a course called [NAND to TETRIS](https://www.nand2tetris.org/). This is a complete online
    digital computer class where you create a working computer that plays TETRIS from just composing NAND gates.
    There is a free [Coursera](https://www.coursera.org/learn/nand2tetris2) class on it as well as on
    [YouTube](https://www.youtube.com/watch?v=Mzy0RG9Z1Ak).
  id: logic
  parents: eng
  short: How electronic circuits and computer chips are created with digital logic
    components and transistors.
  title: Digital Logic
- id: softeng
  parents: eng
  short: What is software engineering? What are the major topics of it? How can you
    use it to help build this site?
  title: Software Engineering
- description: |
    # Overview

    A software product specification (SPS) is a written document that explains what you want and how you will know if you get it.
    It is often called then "specs" or "requirements".

    There are million ways to write an SPS. Only a few are good ways. Many specs are formal patterns, and many are just ad hoc.
    Less important is how to write them. More important is what principles to follow when writing them. Here, we talk about those principles:

    # Principles

    ## Write for your understanding
    > Writing shows us how sloppy our thinking is.

    ## Write with the reader in mind.

    Bad writers write for themselves to read; to check some documentation box. Good writers write for and have empathy for the reader.
    You understand the topic. That's why you are writing it. Taking your knowledge for granted is one big mistake in writing for others.
    Assume the reader doesn't know something and at minimal, provide a link to ramp up quickly.

    ## Think like a lawyer

    If there are multiple ways to interpret something written, then assume the reader will accidentally (or worse deliberately) interpret it the wrong way.
  id: softeng_specification
  parents: softeng
  short: What are the most important parts of an SPS?
  title: Writing a Software Product Specification (SPS)
- id: theory
  short: How simple can we make a computer that can do everything, given enough time?
  title: Theory of Computation
- description: |
    Alan Turing (1912-1954) was a British mathematician, logician, and a major contributor to mathematics, cryptanalysis,
    computer science, and artificial intelligence.
    He invented the universal Turing machine, an abstract computing machine that encapsulates the fundamental logical principles
    of the digital computer.
    Turing played a crucial role in cracking intercepted coded messages during World War II, enabling the Allies to defeat the Axis powers in many crucial engagements.

    Alan invented the concept of a "Turing Machine", which is an abstract definition of computation.
    A machine or programming language is said to be **Turing Complete** (or a **Universal Turing Machine**) if every possible programming language or application can be written
    in it. NOTE: Not every machine that is Turing Complete is a Universal Turing Machine.

    Some interesting Turing Complete machines:

    * [Conway's Game of Life](https://conwaylife.com/)
    * [Magic the Gathering Card Game](https://arstechnica.com/science/2019/06/its-possible-to-build-a-turing-machine-within-magic-the-gathering/)
    * The [NAND Gate](https://en.wikipedia.org/wiki/NAND_gate). By repeating this simple logical gate,
      you can create any other logic gate, and thus any computer in the world.
      In fact, [NAND to TETRIS](https://www.nand2tetris.org/) is a complete online
      digital computer class where you create a working computer that plays TETRIS from just composing NAND gates.
      There is a free [Coursera](https://www.coursera.org/learn/nand2tetris2) class on it as well as on
      [YouTube](https://www.youtube.com/watch?v=Mzy0RG9Z1Ak).
    * [Langton's ant](https://en.wikipedia.org/wiki/Langton%27s_ant)
    * [Minecraft](https://en.wikipedia.org/wiki/Minecraft) - with "redstone" some people (with too much time on their hands) have implemented actual CPUs in a world.
      * [Here is an 8-bit processor that runs in Minecraft](https://www.pcworld.com/article/559794/8-bit-computer-processor-built-in-minecraft-can-run-its-own-games.html) -
        8-bit processors were the first micro computers to come out about in the later 1970's. Pacman and Space Invaders used them, as well as
        the TRS-80 and the first Apple computer.
      * [Minecraft in Minecraft](https://www.youtube.com/watch?v=-BP7DhHTU-I) - to add insult to injury, someone created the game of
        Minecraft that was running in the CPU created in Minecraft. I'm dumbfounded. It runs very slowly (obviously) so it had to run
        on a server to make the video one frame at a time. There is nothing in "Turing Completeness" that says something has to run fast.
        I will introduce the acronym TMFTOOH to mean "Too Much Free Time on one's Hand" since I will likely use it again.
    * [Programmable 4-Way Flying Machine in Minecraft (Full Explanation)](https://www.youtube.com/watch?v=p4bmrlo6yqE) - another programmable
      thingy in Minecraft.
    * The [Busy Beaver](https://en.wikipedia.org/wiki/Busy_beaver) is turing complete.
    * [Wang Tiles](https://en.wikipedia.org/wiki/Wang_tile)
    * [x86 MOV Instruction](https://drwho.virtadpt.net/files/mov.pdf) - interesting that a single instruction in the
      Intel chip (which we all use) is Turing Complete. That means you can write a compiler for all programming languages
      that compiles to a string of MOV commands.
    * [Cities: Skylines](https://medium.com/@balidani/cities-skylines-is-turing-complete-e5ccf75d1c3a) is a city simulation game that is
      complex enough to build universal logic gates in it. Using universal logic gates it is possible to construct any circuit including
      Turing complete machines. So, just like in Minecraft one can build a computer inside Cities: Skylines.
    * [Chemical Computers](https://en.wikipedia.org/wiki/Chemical_computer) - Chemical reactions were seen as a simple move towards a
      stable equilibrium which was not very promising for computation; until now.
    * [DNA Computing](https://en.wikipedia.org/wiki/DNA_computing)
    * [Breaking news: HTML+CSS is Turing complete](https://lemire.me/blog/2011/03/08/breaking-news-htmlcss-is-turing-complete) - because
      it can be used to program a [Rule 110](https://en.wikipedia.org/wiki/Rule_110) automaton.
      Rule 110 is arguably the simplest known Turing complete system. It is one algorithm of many described in Stephen Wolfram's
      [A New Kind of Science](https://www.wolframscience.com/nks/) book, which is online for free.
  id: turingmachines
  links:
  - text: Alan Turing (Wikipedia)
    url: https://en.wikipedia.org/wiki/Alan_Turing
  - text: Turing Completeness (Wiki)
    url: https://en.wikipedia.org/wiki/Turing_completeness
  - text: Surprisingly Turing-Complete (Wiki)
    url: https://gwern.net/turing-complete
  - short: a language that aims for Turing-completeness in an arbitrarily small number
      of linguistic elements - ideally, as few as possible.
    text: Turing Tarpit
    url: https://esolangs.org/wiki/Turing_tarpit
  - short: |
      Not the most politely named programming language, but it does exist in Repl.it and you can quickly get an idea of what
      such a programming language looks like.
    text: BrainF  (Wiki)
    url: https://en.wikipedia.org/wiki/Brainfuck
  - short: |
      It is possible to build a computer with just one instruction, typically with three parameters.
      Here is a list of many such computers that have been proven to be Turing Complete.
    text: One Instruction Set Computers (Wiki)
    url: https://en.wikipedia.org/wiki/One-instruction_set_computer
  - short: An example of a language that prints "HI" on the screen.
    text: SUBtract and branch if Less-than or EQual to zero
    url: https://esolangs.org/wiki/Subleq
  - text: Connection between NAND gates and Turing completeness
    url: https://cs.stackexchange.com/questions/51220/connection-between-nand-gates-and-turing-completeness
  - short: An actual implementation of a OISC machine.
    text: One Instruction Set Computer (OISC) Compiler
    url: https://www.sccs.swarthmore.edu/users/06/adem/engin/e25/finale/
  - short: Talk about students with too much free time on their hand. This is definitely
      academic.
    text: HIGHER SUBLEQ - Compiler into OISC language
    url: http://mazonka.com/subleq/hsq.html
  - short: |
      The NAND gate has the property of functional completeness, which it shares with the NOR gate.
      That is, any other logic function (AND, OR, etc.) can be implemented using only NAND gates.
      NAND and NOR are called a "Universal Gate" for just this reason.
    text: Is the NAND gate logical complete?
    url: https://short-informer.com/is-the-nand-gate-logical-complete/
  - text: Turing Machines - Stanford Encyclopedia of Philosophy
    url: https://plato.stanford.edu/entries/turing-machine/
  - short: |
      An Oracle is a mythical, hypothetical computer that can instantly answer a YES or NO question in any context.
      It is used in proofs of certain types of theoretical computing; e.g. cryptography.
    text: Oracle (Wiki)
    url: https://en.wikipedia.org/wiki/Oracle_machine
  - short: C2 was the original computer wiki site.
    text: C2's definition.
    url: http://wiki.c2.com/?TuringComplete
  parents: theory
  short: What is a Turing Machine, and why do we care?
  title: Turing Machines
- description: 'Artificial Intelligence is a broad category of these subjects:

    '
  id: ai
  links:
  - text: Reinforcement Learning Concept on Cart-Pole with DQN
    url: https://towardsdatascience.com/reinforcement-learning-concept-on-cart-pole-with-dqn-799105ca670
  purpose: ''
  short: What are the methods of artificial intelligence and machine learning?
  title: Artificial Intelligence
- id: expertsystems
  parents: ai
  short: null
  title: Expert System
- id: ga
  parents: ai
  short: Trying to find the best solution by breeding the best with the best and applying
    a fitness function.
  title: Genetic Algorithms
- id: ml
  parents: ai
  short: Creating a complex model (or function) by training a system with given input
    and outputs.
  title: Machine Learning
- id: machinevision
  parents: ai
  short: null
  title: Machine Vision
- id: neuralnetworks
  parents: ai
  short: Artificial Neural Networks simulate how brains learn.
  title: Neural Networks
- id: nlp
  parents: ai
  short: null
  title: Natural Language Processing
- id: nlu
  parents: nlp
  short: This focuses on semantic analysis or determining the intended meaning of
    text.
  title: Natural Language Understanding (NLU)
- id: nlg
  parents: nlp
  short: This focuses on text generation by a machine.
  title: Natural Language Generation (NLG)
- id: speechrecognition
  parents: nlp
  short: This involves the translation of spoken language into text.
  title: Speech Recognition
- id: sentimentanalysis
  parents: nlp
  short: An NLP technique that analyzes text to identify its sentiments, such as "positive,"
    "negative," or "neutral." Sentiment analysis is commonly used by businesses to
    better understand customer feedback.
  title: Sentiment Analysis
- id: nlpsummarization
  parents: nlp
  short: An NLP technique that summarizes a longer text, in order to make it more
    manageable for time-sensitive readers.
  title: Summarization
- id: nlpkeywordextraction
  parents: nlp
  short: An NLP technique that analyzes a text to identify the most important keywords
    or phrases. Keyword extraction is commonly used for search engine optimization
    (SEO), social media monitoring, and business intelligence purposes.
  title: Keyword Extraction
- id: nlptokenization
  parents: nlp
  short: The process of breaking characters, words, or subwords down into "tokens"
    that can be analyzed by a program.
  title: Tokenization
- id: fnn
  parents: neuralnetworks
  short: The simplest type of neural network where information travels in one direction,
    from the input layer, through the hidden layers, to the output layer.
  title: Feedforward Neural Networks (FNNs)
- id: rnn
  parents: neuralnetworks
  short: Unlike FNNs, RNNs have connections that form directed cycles. This allows
    them to maintain an internal state that can process sequences of inputs.
  title: Recurrent Neural Networks (RNNs)
- id: ssm
  parents: rnn
  short: These are a variant of RNNs, used in tasks that require mapping input sequences
    to output sequences. They are widely used in tasks like machine translation, speech
    recognition, etc.
  title: Sequence-To-Sequence Models
- id: cnn
  parents: neuralnetworks
  short: Primarily used for image processing, natural language processing, and other
    grid-like data inputs. They have convolutional layers that filter inputs for useful
    information.
  title: Convolutional Neural Networks (CNNs)
- description: |
    Applications are:

    * Automatic Machine Translation
    * Object Classification in Photographs
    * Automatic Handwriting Generation
    * Character Text Generation
    * Image Caption Generation
    * Colorization of Black and White Images
    * Automatic Game Playing
  id: dnn
  parents: neuralnetworks
  short: Have multiple layers between the input and output layers (more than 3).
  title: Deep Neural Networks (DNNs)
- id: deeplearning
  parents: dnn
  short: DNNs with lots of layers.
  title: Deep Learning
- id: dbn
  parents: neuralnetworks
  short: These are generative graphical models which learn to extract a deep hierarchical
    representation of the training data.
  title: Deep Belief Networks (DBNs)
- id: rbfnn
  parents: neuralnetworks
  short: These use radial basis functions as activation functions. They have an input
    layer, a hidden layer with non-linear radial symmetric activation functions, and
    a linear output layer.
  title: Radial basis function Neural Networks (RBFNNs)
- id: mnn
  parents: neuralnetworks
  short: These are complex systems that are used to improve the performance of a system
    by integrating several neural network modules.
  title: Modular Neural Networks (MNNs)
- courses:
  - assignments:
    - acceptance: 'xxx

        '
      description: 'xxx

        '
      id: xxx
      title: xxx
    description: xxx
    id: xxx1
    title: xxx
  description: |
    [TensorFlow](https://en.wikipedia.org/wiki/TensorFlow), created by Google in 2015,
    is an open-source platform for machine learning. TensorFlow can run on GPUs and in parallel across many machines.

    # Quick Start

    ```cmd
    pip install tensorflow
    ```
  id: tensorflow
  parents: ai tools
  short: 'An open-source platform for machine learning. Similar to numpy, TensorFlow
    can run on GPUs and in parallel across many machines.

    '
  title: TensorFlow
- id: einsum
  links:
  - text: EinSum for Tensor Manipulation
    url: https://swe-to-mle.pages.dev/posts/einsum-for-tensor-manipulation/
  parents: tensors neuralnetworks
  short: |
    Einstein summation convention is a compact representation of certain tensor operations.
    It is used in many libraries, including TensorFlow and PyTorch.
  title: Keras
- id: keras
  parents: tensorflow tensors neuralnetworks
  short: |
    An open-source, high-level, user-friendly python library used for building and training neural networks that runs on top of TensorFlow.
    Developed to enable fast experimentation and iteration, and it lowers the barrier to entry for working with deep learning.
    It adds the flexibility of PyTorch to TensorFlow.
  title: Keras
- id: pytorch
  parents: ai tools
  short: |
    Another Pythonish open-source library similar to TensorFlow and created by Facebook.
    It purports to be more flexible when creating complex models, easier to use with Python, easier to debug,
    and imperative.
  title: PyTorch
- id: history
  short: Always intellectual to know how computer technology was invented and how
    it evolved.
  title: Computer History
- id: cpus
  parents: history
  short: Always intellectual to know how computer technology was invented and how
    it evolved.
  title: Central Processing Units
- description: "## Timeline\nSome important (author's choice) relevant dates in the\
    \ history of computers and software.\n\n* **2nd century BC** - [Antikythera mechanism](https://en.wikipedia.org/wiki/Antikythera_mechanism)\
    \ - first indication of\nand analog computer.\n* **1642** - Blaise Pascal (France)\
    \ invented the [mechanical calculator](https://en.wikipedia.org/wiki/Pascal%27s_calculator).\n\
    * **1672** - Gottfried Leibniz (Germany) started designing a machine which multiplied,\
    \ the [Stepped Reckoner](https://en.wikipedia.org/wiki/Stepped_reckoner).\n* **1685**\
    \ - Gottfried Leibniz (Germany) 4-function calculator.\n* **1822** - Charles Babbage\
    \ builds first prototype of the [decimal difference engine](https://en.wikipedia.org/wiki/Difference_engine)\
    \ for tabulating polynomials.\n* **1832** - Semen Korsakov (Russia) proposed the\
    \ usage of punch cards to store information.\n* **1839** - Jacquard Loom (England)\
    \ required 24,000 punched cards to create an intricate woven pattern.\n* **1847**\
    \ - British Mathematician George Boole developed binary algebra (Boolean algebra).\n\
    * **1886** - Herman Hollerith (USA) proposed punch cards (or [Hollerith Cards](https://en.wikipedia.org/wiki/Punched_card))\
    \ for\n  tabulating data.\n* **1890** - IBM founded to tabulate the 1980 Census\
    \ Data.\n* **1990** - First [flip-flop circuit](https://en.wikipedia.org/wiki/Flip-flop_(electronics))\
    \ design in England; later to become the main circuit in RAM.\n* **1930** - Vannevar\
    \ Bush built a partly electronic differential analyzer capable of solving differential\
    \ equations.\n* **1931** - Kurt G\xF6del (Austria) publishes G\xF6del Theorem\
    \ about the incompleteness of mathematics.\n* **1936** - Alan Turing (Cambridge\
    \ University, England), published papers on theoretical computation; Turing Incompleteness\
    \ Theorem.\n* **1937** - George Stibitz (Bell Labs, New York City) builds first\
    \ binary computer.\n* **1937** - Claude E. Shannon published a paper on the implementation\
    \ of symbolic logic using relays as his MIT Master's thesis.\n* **1938** - Konrad\
    \ Zuse (Berlin), completed the 'Z1', the first mechanical binary programmable\
    \ computer.\n* **1939** - William Hewlett and David Packard (Palo Alto, California)\
    \ established the Hewlett-Packard Company in Packard's garage.\n* **1943** - Mark\
    \ 1 Colossus (UK) computer to crack German codes. It had 2400 vacuum tubes and\
    \ could process 25,000 characters a second\n* **1944** - Harvard [Mark I](https://en.wikipedia.org/wiki/Harvard_Mark_I)\
    \ (US) computer by IBM.\n* **1945** - [Vannevar Bush](https://en.wikipedia.org/wiki/Vannevar_Bush)\
    \ developed memex theory, a hypertext systems, eventually leading to the creation\
    \ of the World Wide Web.\n* **1945** - [John Von Neumann](https://en.wikipedia.org/wiki/John_von_Neumann)\
    \ designs the Von Neumann architecture, which the Intel chips are based on.\n\
    * **1947** - Kathleen Booth (University of London) invents first assembly language\
    \ for the APEC.\n* **1947** - William B. Shockley (Bell Labs, USA) invents the\
    \ transistor.\n* **1949** - Cambridge University executed the first stored program\
    \ on the EDSAC computer.\n* **1950** - Alan Turing published a paper describing\
    \ the potential development of human and computer intelligence and communication\
    \ - the Turing Test.\n* **1951** - First computer generated music\n* **1951**\
    \ - US builds EDVAC (electronic discrete variable computer) to load programs from\
    \ [paper tape](https://en.wikipedia.org/wiki/Punched_tape).\n* **1951** - Grace\
    \ Murray Hopper invents A-0, the first high-level compiler.\n* **1955** - John\
    \ Backus (IBM) invents [FORTRAN](https://en.wikipedia.org/wiki/Fortran)\n* **1956**\
    \ - Dartmouth College (New Hampshire) holds first conference on AI.\n* **1957**\
    \ - IBM first dot matrix printer.\n* **1958** - John McCarthy (MIT) invents [LISP](https://en.wikipedia.org/wiki/Lisp_(programming_language))\
    \ language.\n* **1958** - Jack Kilby (Texas Instruments) invents the first integrated\
    \ circuit.\n* **1959** - **Second Generation computers** based on transistors.\n\
    * **1959** - Robert Noyce (Fairchild Semiconductor) develops silicon integrated\
    \ circuit.\n* **1960** - [ALGOL](https://en.wikipedia.org/wiki/ALGOL) programming\
    \ language, first to use code blocks; e.g. BEGIN and END\n* **1961** - Kenneth\
    \ Iverson (IBM) invents APL programming language.\n* **1962** - England (University\
    \ of Manchester) build most powerful computer, the ATLAS, having modern architectural\
    \ concepts:\n spooling, interrupts, pipelining, interleaved memory, virtual memory\
    \ and paging.\n* **1963** - Douglas Engelbart conceived of the Mouse, later popularized\
    \ by Apple Lisa.\n* **1963** - J. C. R. Licklider (IBM) kicks off [Project MAC](https://en.wikipedia.org/wiki/MIT_Computer_Science_and_Artificial_Intelligence_Laboratory#Project_MAC),\n\
    \  DARPA funded, to start networking computers. First Internet.\n* **1964** -\
    \ **Third-generation computers** based on integrated circuits\n* **1964** - IBM\
    \ releases [PL/1](https://en.wikipedia.org/wiki/PL/I) programming language.\n\
    * **1964** - IBM releases IBM System/360, first standard computer.\n* **1965**\
    \ - Digital Equipment Corporation (DEC) releases the first minicomputer: [PDP-8](https://en.wikipedia.org/wiki/PDP-8)\n\
    * **1965** - Moore's Law, by Gordon Moore.\n* **1965** - Fuzzy logic designed\
    \ by Lotfi Zadeh (University of California, Berkeley)\n* **1965** - Dartmouth\
    \ College releases BASIC (Beginners All Purpose Symbolic Instruction Code) programming\
    \ language\n* **1965** - Donald Davies invent \"packet switching\", used by ARPANET,\
    \ the precursor of the Internet.\n* **1967** - Niklaus Wirth created Pascal programming\
    \ language; to become the academic language. Python took that title around 2010.\n\
    * **1968** - Robert Noyce founded Intel\n* **1968** - HP creates first programmable\
    \ calculator - the [HP 9100A](https://en.wikipedia.org/wiki/Hewlett-Packard_9100A).\n\
    * **1968** - Douglas Engelbart discusses GUI and hypertext documents.\n* **1969-11-29**\
    \ - First computer-to-computer login occurred between Stanford and UCLA\n* **1969**\
    \ - Start of UNIX OS\n* **1969** - [RS-232](https://en.wikipedia.org/wiki/RS-232)\
    \ interface created\n* **1969** - Data General sells 8000 [Nova Computers](https://en.wikipedia.org/wiki/Data_General_Nova)\
    \ - the first 16-bit minicomputer.\n* **1970** - [FORTH](https://en.wikipedia.org/wiki/Forth_(programming_language))\
    \ programming language.\n* **1971** - First email sent.\n* **1971-11-15** - Intel\
    \ develops the first commercially available 4-bit [4004](https://en.wikipedia.org/wiki/Intel_4004)\
    \ microprocessor. Frederico Faggin.\n* **1971** - 8-inch floppy disk.\n* **1972**\
    \ - [Pong](https://en.wikipedia.org/wiki/Pong) game released.\n* **1972** - **Fourth-generation\
    \ computers** based on LSI (Large Scale Integration) circuits.\n* **1972** - Dennis\
    \ Ritchie (Bell Labs) develops C language - to introduce \"structured programming\"\
    \ paradigm.\n* **1972** - HP creates first hand-held calculator - renders slide\
    \ rules obsolete.\n* **1972-04-01** - Intel [8008](https://en.wikipedia.org/wiki/Intel_8008)\
    \ microprocessor.\n* **1972** - ARPANET makes first international connection.\
    \ Becomes the Internet.\n* **1973** - The first personal computer - the [SCAMP](https://en.wikipedia.org/wiki/Portable_computer#SCAMP)\
    \ to run [APL](https://en.wikipedia.org/wiki/APL_(programming_language)).\n* **1973**\
    \ - [Clifford Cocks](https://en.wikipedia.org/wiki/Clifford_Cocks) (UK) mathematician\
    \ invents prime number factorization cryptography to become the first public key\
    \ encryption.\n* **1973** - Vint Cerf and Robert Kahn develop [TCP/IP](https://en.wikipedia.org/wiki/Internet_protocol_suite).\n\
    * **1973** - [Prolog](https://en.wikipedia.org/wiki/Prolog) programming language\
    \ invented in France.\n* **1973** - Don Lancaster displayed alphanumeric information\
    \ on an ordinary television set.\n* **1973** - [Ethernet](https://en.wikipedia.org/wiki/Ethernet)\
    \ invented.\n* **1974-04-01** - [Intel 8080](https://en.wikipedia.org/wiki/Intel_8080)\
    \ 8-bit microprocessor released.\n* **1974** - Motorola [MC6800](https://en.wikipedia.org/wiki/Motorola_6800)\
    \ 8-bit microprocessor released\n* **1975** - Italy [Olivetti P6060](https://en.wikipedia.org/wiki/Olivetti_P6060)\
    \ first personal computer with a floppy drive.\n* **1975** - Bill Gates and Paul\
    \ Allen create first BASIC implementation on a microcomputer; the MITS Altair.\
    \ This lead to the creation of Microsoft.\n* **1975** - MOS Technology released\
    \ [6502](https://en.wikipedia.org/wiki/MOS_Technology_6502) microprocessor; used\
    \ in the Apple I and II, Atari, Commodore Pet, and VIC-20.\n* **1975-11** - [Zilog](https://en.wikipedia.org/wiki/Zilog)\
    \ founded by ex-Intel employees.\n* **1976-04-01** - Steve Wozniak and Steve Jobs\
    \ founded Apple Computers.\n* **1976** - IBM makes first laser printer.\n* **1976**\
    \ - Zilog releases [Z80](https://en.wikipedia.org/wiki/Zilog_Z80) microprocessor,\
    \ compatible with the Intel 8080, and popularized by the [TRS-80](https://en.wikipedia.org/wiki/TRS-80_Model_II#Model_16).\n\
    * **1976** - Seymour Cray invents the Cray-1 supercomputer - the first super computer.\n\
    * **1976** - Guy Steele invents EMACS.\n* **1976** - [COSMAC ELF](/pages/Cosmac\
    \ Elf.md) released.\n* **1978-06-08** - Intel 16-bit 8086 microprocessor; the\
    \ first x86 chip.\n* **1978** - Japan releases the Space Invaders game.\n* **1979**\
    \ - ADA programming language invented for the DoD.\n* **1979** - Intel 8088 microprocessor\
    \ invented (a cheaper version of the 8086) for the IBM PC.\n* **1979** - Japan\
    \ invents the compact disc.\n* **1979** - Motorola releases the 32-bit [68000](https://en.wikipedia.org/wiki/Motorola_68000).\n\
    * **1979** - [VisiCalc](https://en.wikipedia.org/wiki/VisiCalc) released as the\
    \ first spreadsheet, thanks to Dan Bricklin.\n* **1979** - WordStar released.\n\
    * **1980** - Japan releases PacMan\n* **1980** - Microsoft creates DOS.\n* **1981**\
    \ - IBM announces the IBM-PC.\n* **1981** - IBM announces the IBM-PC with MS-DOS\
    \ 1.0\n* **1981** - TCP/IP established.\n* **1981** - Richard Feynman proposed\
    \ quantum computers.\n* **1982-02** - 80286 released.\n* **1982-05** - IBM launch\
    \ the double-sided 320 KB floppy disk drive.\n* **1982-07** - Timex/Sinclair announces\
    \ the [Sinclair 1000](https://en.wikipedia.org/wiki/Timex_Sinclair_1000) personal\
    \ computer - the first under $100.\n* **1982-08** - [Commodore 64](https://en.wikipedia.org/wiki/Commodore_64)\
    \ released - the highest-selling single computer model of all time.\n* **1982-12**\
    \ - IBM bought 12% of Intel.\n* **1983-01** - Apple introduces the [Lisa](https://en.wikipedia.org/wiki/Apple_Lisa)\
    \ computer.\n* **1983-01** - [Lotus 1-2-3](https://en.wikipedia.org/wiki/Lotus_1-2-3)\
    \ - the \"killer\" application for the IBM-PC\n* **1983-09** - Richard Stallman\
    \ announces the GNU Project, to create a free software - eventually led to Linux.\n\
    * **1983-10** - Microsoft Word.\n* **1983-11** - DNS introduced to the Internet\n\
    * **1983** - Philippe Kahn founded [Borland](https://en.wikipedia.org/wiki/Borland)\
    \ company - creator of Turbo Pascal by Anders Hejlsberg, who also later created\
    \ C# programming language.\n* **1984-05** - HP LaserJet released. 20 million sold.\n\
    * **1984** - Borland releases [Turbo Pascal](https://en.wikipedia.org/wiki/Turbo_Pascal)\
    \ - the first programming language sold with an integrated development environment\
    \ (IDE)\n  containing the compiler, editor, linker, and debugger. Sold for $49.99\
    \ and sold more than 400K copies. It became one of the most\n  popular programming\
    \ languages of the time.\n* **1985-03** - MS-DOS 3.1\n* **1985-03** - Symbolics\
    \ registered the symbolics.com domain, the first .com domain in the world.\n*\
    \ **1985-06** - Commodore 128 was Commodore's last 8-bit computer. $299.95\n*\
    \ **1985-07** - Commodore released the Amiga\n* **1985-10** - Intel 80386 DX released\
    \ - 33 MHz and can address up to 4 GB of RAM.\n* **1985-11** - Microsoft Windows\n\
    * **1985** - Philips (Japan) invents the CD-ROM\n* **1985** - Enhanced Graphics\
    \ Adapter (EGA) released.\n* **1986-06** - Eric Thomas invents LISTSERV, the first\
    \ automated mailing list management application\n* **1986-10** - [Compaq DeskPro](https://en.wikipedia.org/wiki/Compaq_Deskpro_386)\
    \ released.\n* **1987-04** - IBM introduces the PS/2 Computer Systems.\n* **1987-04**\
    \ - IBM introduces the PS/2 Computer Systems.\n* **1987-12** - Microsoft Windows\
    \ 2\n* **1987** - [HyperCard](https://en.wikipedia.org/wiki/HyperCard) released.\n\
    * **1987** - IBM VGA\n* **1988** - WORM (Write Once Read Many times) \u2013 disks\
    \ marketed for first time by IBM.\n* **1988** - Adobe Photoshop\n* **1989-04**\
    \ - Intel 80486\n* **1989** - Tim Berners-Lee invents the World Wide Web\n* **1990-05**\
    \ - Microsoft Windows 3.0\n* **1990-11** - Microsoft Office\n* **1991** - Phil\
    \ Zimmermann releases public key encryption program PGP and source code.\n* **1991**\
    \ - Linus Torvalds (Finland) releases Linux Kernel.\n* **1992** - MIPS releases\
    \ first 64-bit microprocessors, the MIPS R4000.\n* **1992** - IBM PowerPC\n* **1992**\
    \ - Wolfenstein 3D Game\n* **1993** - Mosaic graphical web browser launched\n\
    * **1993** - MP3\n\n# References\n\n* [Run old machines in the browser](https://www.pcjs.org/)\n\
    * [COSMAC](/pages/Cosmac Elf.md)\n"
  id: computers
  links:
  - text: Wikipedia - History of Computers
    url: https://en.wikipedia.org/wiki/History_of_computing
  - short: |
      With the goal to keep a history of old software (especially those that read documents) the solution is to emulate the
      machines and operating systems that these old software run on. Machines back then ran in the MHz. Today's computers are
      1000x faster.
    text: 'A Quarter In, A Quarter-Million Out: 10 Years of Emulation at Internet
      Archive'
    url: https://blog.archive.org/2023/09/20/a-quarter-in-a-quarter-million-out-10-years-of-emulation-at-internet-archive/
  - short: List of home computers since 1976
    text: Dave's Old Computers
    url: http://dunfield.classiccmp.org/
  - text: A Brief History of the Internet
    url: https://www.usg.edu/galileo/skills/unit07/internet07_02.phtml
  parents: history
  short: History of computers
  title: Computers
- description: |
    ## Timeline
    Some important relevant dates in the history of the WWW..

    * **1983-01-01** - The official birthday of the Internet.
      Prior to this, the various computer networks did not have a standard way to communicate with each other.
      ARPANET changed its standard to TCP/IP
    * **1985-10** Intel introduced the [80386](https://www.xtof.info/intel80386.html) with Memory Management Unit (MMU) that allows
      virtual memory and disk swapping. It was Intel's first 32-bit CPU.
    * **1989-03-12** - Tim Berners-Lee proposes the World Wide Web
    * **1990-12** - First web browser and web site. WWW goes live.
    * **1992-08** Linus Torvalds release the first Linux. It ran on the 80386
    * **1993-01** - First release of Mosaic Browser.
    * **1993-07** - Microsoft Windows NT
    * **1994-12** - 10,000 web servers around the world.
  id: www
  links:
  - text: Wikipedia - History of the World Wide Web
    url: https://en.wikipedia.org/wiki/History_of_the_World_Wide_Web
  - short: |
      With the goal to keep a history of old software (especially those that read documents) the solution is to emulate the
      machines and operating systems that these old software run on. Machines back then ran in the MHz. Today's computers are
      1000x faster.
    text: 'A Quarter In, A Quarter-Million Out: 10 Years of Emulation at Internet
      Archive'
    url: https://blog.archive.org/2023/09/20/a-quarter-in-a-quarter-million-out-10-years-of-emulation-at-internet-archive/
  - text: 'Timeline: The 30-Year History of the World Wide Web'
    url: https://www.visualcapitalist.com/30-year-timeline-world-wide-web/
  parents: history
  short: History of the World Wide Web
  title: World Wide Web
- id: other
  short: Uncategorized subjects that do not seem to have a "best" parent yet.
  title: Other
- description: |
    For $40 from Amazon, you can get a Software-Defined Radio (SDR) USB dongle that plugs into your computer to allow it to
    receive radio signals much like a HAM radio.

    ![RTL SDR KIT](/static/images/rtl-sdr.png)

    [RTL-SDR Blog V4 R828D RTL2832U 1PPM TCXO HF Bias Tee SMA Software Defined Radio with Dipole Antenna Kit](https://www.amazon.com/RTL-SDR-Blog-RTL2832U-Software-Defined/dp/B0CD7558GT)

    # Quick Steps

    * Plug in RealTek Limited (RTL) dongle
    * [Download the software](https://www.sdr-radio.com/download), install and run it.
      * Be sure to skip all the tricky adware advertisements. Look for this:
        * ![Download](/static/images/rtl-sdr-download.png)
    * Choose **Select radio**. You should see your dongle.
  id: sdr
  links:
  - text: Wikipedia
    url: https://en.wikipedia.org/wiki/Software-defined_radio
  - text: SDR-Radio.com
    url: https://www.sdr-radio.com/
  - short: This page is a guide aimed at helping anyone set up a cheap radio scanner
      based on the RTL-SDR software defined radio as fast as possible on a Windows
      system.
    text: SDR-Radio.com - Quick Start Guide
    url: https://www.rtl-sdr.com/rtl-sdr-quick-start-guide/
  - text: Getting Started With SDR - Tutorial
    url: https://austinsnerdythings.com/2021/09/11/getting-started-with-sdr-software-defined-radio-a-tutorial/
  - text: YouTube SDR For Beginners - Listening To GMRS Or Ham On SDR & Basic Overview
      Of SDR Using CubicSDR Software
    url: https://www.youtube.com/watch?v=9PzvGyBWeHM
  - text: YouTube Sharp Walkthrough & Trunking Explained for the Absolute Beginner
    url: https://www.youtube.com/watch?v=IeBlEC9e5cQ
  - text: Phoenix Police Frequencies
    url: https://www.police-frequencies.com/arizona/maricopa/phoenix/
  parents: other
  short: HAM Radio from your laptop
  title: Software Defined Radio (SDR)
- id: mysubject
  short: Just an example of a subject
  title: My Subject