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