Skip to content

Instantly share code, notes, and snippets.

@bhpayne
Created December 16, 2020 00:48
Show Gist options
  • Save bhpayne/a355fac19c36ee8c93536c59bce3c525 to your computer and use it in GitHub Desktop.
Save bhpayne/a355fac19c36ee8c93536c59bce3c525 to your computer and use it in GitHub Desktop.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<thisdocument>
<process userobjective="turn on the computer">
<!-- https://www.quora.com/How-does-a-power-button-work-in-a-computer -->
<!-- https://wiki.osdev.org/System_Initialization_(x86) -->
<!-- https://wiki.osdev.org/System_Initialization_(x86) -->
<task entity="user" action="push power button">
<task entity="power button" action="electrical current running through wire is interrupted"></task>
<task entity="electrical wire" action="current goes to zero for short duration"></task>
<task entity="mother board" action="?"></task>
<task entity="CPU" action="starts by executing whatever code is found at the bottom of its memory map, which is bios code.">
<task entity="CPU" action="executes instructions from ROM which contains a BIOS initialization program"></task>
</task>
<task entity="BIOS" action="sets up a bootloader">
<task entity="BIOS" action="RAM dection"></task>
<task entity="BIOS" action="Hardware detection/initialization"></task>
<task entity="BIOS" action="Boot sequence"></task>
</task>
<task entity="BIOS" action="hands control to the OS">
<task entity="BIOS" action="boots some devices directly into your OS-specific bootloader"></task>
<task entity="BIOS" action="boots other devices (any hard disk, or anything emulating a hard disk) into an MBR"></task>
</task>
</task>
<task entity="OS" action="OS starts userspace"></task>
</process>
<process userobjective="browse the web">
<!-- https://medium.com/@maneesha.wijesinghe1/what-happens-when-you-type-an-url-in-the-browser-and-press-enter-bb0aa2449c1a -->
<!-- https://vanseodesign.com/web-design/browser-requests/
probably based on the medium post, but adds insight on the browser rendering stage -->
<!-- https://varvy.com/pagespeed/display.html
keywords: request, response, build, render
details on layout/reflow and paint process -->
<!-- https://en.wikipedia.org/wiki/OSI_model -->
<!-- https://unix.stackexchange.com/a/418323/431711 -->
<task entity="user"
action="open web browser">
<task entity="user"
action="use mouse to move pointer on desktop icon for browser">
<task entity="mouse hardware"
action="mouse moves across a surface"></task>
<task entity="mouse hardware"
action="light sensor detects movement"></task>
<task entity="mouse hardware"
action="signal is sent across USB cable"></task>
<task entity="mouse hardware"
action="data is sent using a protocol">
<task entity="mouse hardware"
action="electrical signals are sent across USB cable">
</task>
</task>
<task entity="computer"
action="operating system translates USB signal to pointer on screen"></task>
</task>
<task entity="user"
action="use mouse to click on desktop icon for browser">
</task>
</task>
<task entity="user"
action="enter URL of desired website">
<task entity="user"
action="use keyboard to type URL">
</task>
<task entity="user"
action="hit 'enter' when URL is complete">
</task>
</task>
<task entity="web browser"
action="shows webpage">
<task entity="web browser"
action="separate path from domain name from protocol">
</task>
<task entity="web browser"
action="browser checks the cache for a DNS record to find the corresponding IP address of URL">
<context>
DNS(Domain Name System) is a database that maintains the name of the
website (URL) and the particular IP address it links to.
</context>
<task entity="web browser"
action="check browser's in-memory cache">
<context>
The browser maintains a repository of DNS records for a fixed duration for websites you have previously visited.
</context>
</task>
<task entity="web browser"
action="check operating system's cache">
<task entity="web browser"
action="make a system call">
<example>
system call <command>gethostname</command> on Windows
</example>
<task entity="operating System"
action="check local cache">
</task>
<task entity="operating System"
action="check the router cache">
<task entity="web browser"
action="send request to router">
<task entity="web browser"
action="system call">
<!-- https://unix.stackexchange.com/a/418323/431711 -->
<task entity="operating System"
action="kernel implements TCP connection" osilayer="4 = transport">
<task entity="?" action="send SYN packet to router">
</task>
<task entity="router" action="send SYN-ACK packet to computer">
</task>
<task entity="router" action="send ACK packet to computer">
</task>
<task entity="?" action="IP packet" osilayer="3 = network layer">
<context>
Every single URL on the internet has a unique IP address assigned to it.
</context>
<context>
The IP address belongs to the computer which hosts the server of the website we are requesting to access.
<example>
www.google.com has an IP address of 209.85.227.104
</example>
</context>
<task entity="NIC driver"
action="send request">
<task entity="NIC firmware"
action="send signal (using Ethernet?)">
<task entity="NIC hardware" osilayer="1 = physical"
action="send electrical signal to router">
</task>
</task>
</task>
</task>
</task>
</task>
</task>
</task>
</task>
</task>
<task entity="web browser"
action="check the ISP cache">
<task entity="ISP DNS server"
action="initiates a DNS query to find the IP address of the server that hosts the URL">
<task entity="ISP DNS server"
action="contact the root name server">
<task entity="root name server"
action="redirect ISP DNS server to TLD server">
</task>
</task>
</task>
</task>
</task>
<task entity="web browser"
action="initiates a TCP connection with the server">
</task>
<task entity="web browser"
action="sends an HTTP request to the server">
</task>
<task entity="server"
action="handles the request">
</task>
<task entity="server"
action="sends back an HTTP response">
</task>
<task entity="web browser"
action="renders the HTML content">
<task entity="web browser"
action="build the DOM tree">
</task>
</task>
<task entity="web browser"
action="sends additional requests for objects embedded in the html file (CSS files, images, javascript, etc.)">
</task>
<task entity="server"
action="sends back additional content">
</task>
<task entity="web browser"
action="Process CSS markup and build the CSSOM tree.">
</task>
<task entity="web browser"
action="Combine the DOM and CSSOM into a render tree.">
</task>
<task entity="web browser"
action="Run the layout on the render tree to compute
the geometry of each node. (layout/reflow)">
<task entity="web browser"
action="determine size of screen">
</task>
</task>
<task entity="web browser"
action="Paint the individual nodes to the screen.">
<task entity="web browser"
action="convert each node in the render tree to
actual pixels on the screen.">
</task>
</task>
</task>
<task entity="user"
action="read webpage">
<task entity="user"
action="scroll webpage">
<option>
<task entity="user" action="use keyboard to move webcontent down in browser">
<task entity="user" action="press arrow key">
</task>
</task>
</option>
<option>
<task entity="user" action="use mouse to move page down in browser">
<task entity="user" action="move mouse pointer to scroll bar">
<task entity="mouse hardware" action="mouse moves">
</task>
</task>
</task>
</option>
<option>
<task entity="user" action="use webwheel to move page down in browser">
<task entity="user" action="rotate webwheel">
<task entity="mouse hardware" action="web wheel moves">
</task>
</task>
</task>
</option>
</task>
</task>
<task entity="user"
action="click on relative link">
<task entity="user"
action="use mouse to move pointer on hyperlink in browser">
</task>
<task entity="user"
action="use mouse to click on hyperlinked text browser">
</task>
</task>
<task entity="user"
action="click on absolute link">
<task entity="user"
action="use mouse to move pointer on hyperlink in browser">
</task>
<task entity="user"
action="use mouse to click on hyperlinked text browser">
</task>
</task>
<task entity="user"
action="close browser">
<option>
<task entity="user"
action="use mouse to move pointer to 'close' icon for browser">
</task>
<task entity="user"
action="use mouse to click on 'close' icon for browser">
</task>
</option>
<option>
<task entity="user"
action="terminate browser app using keyboard">
<task entity="user"
action="alt-F4 on keyboard">
</task>
</task>
</option>
</task>
</process>
<process userobjective="turn off the computer">
<task entity="user" action="push power button"></task>
</process>
</thisdocument>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment