Содержание
Table of Contents
Networking, Servers, and Clients
Networking and Packets
00:00:00 - 00:02:39
Networking and Packets
James Halliday introduces Bash by placing its context with the history and background of Unix, an operating system first developed at AT&T Bell Labs in the 1960s. - -
https://github.com/substack/fmmn/blob/master/day1/unix.md -
https://www.youtube.com/watch?v=tc4ROCJYbm0 -
https://en.wikipedia.org/wiki/File:Unix_history-simple.svgProtocols and Ports
00:02:40 - 00:06:46
Protocols and Ports
James introduces the concept of protocols, which are languages that allow computer programs to speak to each other. Examples of protocols include HTTP, SMTP, IMP, and SSH.
Servers and Clients
00:06:47 - 00:09:56
Servers and Clients
James talks about a server, which is a computer listening to incoming connections, even if they are coming from local connections. Clients are computers that are initiating connections with a server on the other end.
Netcat
00:09:57 - 00:12:53
Netcat
Netcat (often abbreviated to nc) is a computer networking utility for reading from and writing to network connections using TCP or UDP.
HTTP and Headers
00:12:54 - 00:19:41
HTTP and Headers
By showing a simple page request to Google from the command line, James introduces the Hypertext Transfer Protocol (HTTP), which is how web servers and browsers communicate with each other.
HTTP Post
00:19:42 - 00:23:30
HTTP Post
James demonstrates how HTTP Post is used to send information through forms.
Curl
00:23:31 - 00:26:28
Curl
James shows how to use the curl command, a tool to transfer data from or to a server with the results from a curl request of presented within the terminal. James takes questions from students.
Curl Headers
00:26:29 - 00:29:17
Curl Headers
James demonstrates how to set HTTP headers within a curl request.
SMTP
00:29:18 - 00:33:06
SMTP
By sending an email through localhost, James introduces SMTP, the protocol used to deliver email messages.
IRC
00:33:07 - 00:36:27
IRC
James introduces Internet Relay Chat (IRC), a text-based chat protocol that is still very popular among programmers.
Q&A: IRC Nicknames
00:36:28 - 00:37:50
Q&A: IRC Nicknames
James takes questions from a student about setting a nickname in an IRC.
Binary Protocols and Inspecting Protocols
00:37:51 - 00:44:31
Binary Protocols and Inspecting Protocols
After mentioning that the previous protocols have been text-based, James reviews binary protocols like SSH. Then James shows how to inspect protocols to review data traveling coming out and into your machine.
Streams
Introducing Streams
00:44:32 - 00:51:43
Introducing Streams
James introduces streams as a method to move data around networks or even on the same computer.
Transform Data
00:51:44 - 01:00:15
Transform Data
To transform a data with a stream, James shows how to convert text case within a file and display the result in standard output. James takes questions from students.
Introducing through2
01:00:16 - 01:02:27
Introducing through2
After installing through2 that allows the creation of streams quickly.
Q&A: Streams
01:02:28 - 01:06:06
Q&A: Streams
James takes questions from student about streaming
Using through2
01:06:07 - 01:10:46
Using through2
James reviews the differences between through2 and native npm for using streams.
Introducing concat-stream
01:10:47 - 01:18:19
Introducing concat-stream
James introduces concat-stream, which is used to collect all the data from a stream into a single buffer.
Q&A: Buffering Streams
01:18:20 - 01:21:56
Q&A: Buffering Streams
James takes questions from students about starting and closing streams. James also demonstrates how to display a message that a buffer is too big instead of closing out the program without warning.
Stream Types
Stream Types
01:21:57 - 01:24:22
Stream Types
James reviews the different types of streams: readable, writable, transform, and duplex.
Writable Streams
01:24:23 - 01:26:51
Writable Streams
After examining the methods for creating writable streams, James demonstrates how to build one.
Readable Stream
01:26:52 - 01:31:50
Readable Stream
James looks at readable stream methods, which are used when supplying data. Readable streams can also be paused and resumed.
Transform and Duplex Stream
01:31:51 - 01:33:57
Transform and Duplex Stream
James reviews the transform stream, which is a particular kind of duplex stream used to operate on a stream in transit. Then James looks at duplex streams, which can accept and deliver content at the same time.
Duplex Streams
01:33:58 - 01:38:45
Duplex Streams
After taking questions from students about different types streams, James provides an example of a duplex stream. Then James takes questions from students.
Simple VPN
01:38:46 - 01:48:20
Simple VPN
Based on a question from a student, James builds a simple VPN using cryptographic core streams methods.
Object Streams
01:48:21 - 01:54:47
Object Streams
James introduces object streams with objectMode, which allows use of any kind of object except null into a stream.
Core Streams
Core Streams
01:54:48 - 01:58:16
Core Streams
James reviews the core streams that are available in node.
HTTP Core Streams
01:58:17 - 02:05:10
HTTP Core Streams
After reviewing HTTP Core Streams, James builds an server and client and have them talk to each other.
Crypto Streams
02:05:11 - 02:08:12
Crypto Streams
James discusses other cryptographic core methods and demonstrates how to incorporate a hash into a stream that can be used to securely identify unique information.
Zlib Core Streams
02:08:13 - 02:12:53
Zlib Core Streams
To use Gzip and Deflate/Inflate, James reviews the Zlib core methods.
split2
02:12:54 - 02:17:09
split2
James introduces split2, which breaks up a stream and reassemble that stream so that each line is a chunk.
Web Socket
Websocket Streams
02:17:10 - 02:28:30
Websocket Streams
James illustrates how to put streams in the browser with HTML5 websockets using node Streams API.
Websocket Node Client
02:28:31 - 02:30:06
Websocket Node Client
After setting up the websockets to work in the browser, James shows how to streams in node with a node websocket client.
Stream Modules
collect-stream, from2, and to2
02:30:07 - 02:34:09
collect-stream, from2, and to2
James reviews modules found to be useful in development: collect-stream for putting streams into an array and performing unit tests; from2 for ready stream with a pull function; and to2 for a writable stream with a write and flush function;
duplexify
02:34:10 - 02:39:09
duplexify
James introduces a duplexify, which creates a writeable and readable stream into a single streams2 duplex stream.
pump, pumpify, and end-of-stream
02:39:10 - 02:44:44
pump, pumpify, and end-of-stream
James discusses error propagation and how it leads to server crashes. To contribute to creating stronger streams, James uses the pump module that helps clean up streams to handle errors gracefully. The pumpify module does similar error handling as pump, but also provides a readable and writeable stream. James introduces end-of-stream, which is a node module that calls a callback when a readable/writable/duplex stream has completed or failed.
Remote Procedure Call and Multiplex
rpc-stream
02:44:45 - 02:48:47
rpc-stream
James introduces Remote Procedure Call (RPC), which is a protocol that one program can use to request a service from a program located on another computer on a network without having to understand the network's details. Then James shows how to set up a simple RPC system.
Multiplex
02:48:48 - 02:57:27
Multiplex
Due to limitations of the number of streams a browser can have at one time, James reviews how to use multiplex to send many streams over a single stream.
Wrapping Up
Q&A: WebRTC
02:57:28 - 03:09:47
Q&A: WebRTC
James takes questions from the audience about using WebRTC with webrtc-swarm.
Q&A: Tag Template Literal
03:09:48 - 03:13:44
Q&A: Tag Template Literal
James takes questions from the audience about tag template literal, the HTML parser, and application frameworks. - -
https://www.npmjs.com/package/dom-morph -
https://github.com/yoshuawuyts/chooQ&A: WebAssembly
03:13:45 - 03:15:22
Q&A: WebAssembly
James talks about the future of JavaScript and WebAssembly.