Random Computer Rambles
Computer science is the study of algorithmic processes, computational machines and computation itself.
Theoretical computer science (TCS) is a subset of general computer science and mathematics that focuses on mathematical aspects of computer science such as the theory of computation, lambda calculus, and type theory. – Wikipedia
Computational Linguistics (Stanford Encyclopedia of Philosophy)
Human knowledge is expressed in language. So computational linguistics is very important. – Mark Steedman, ACL Presidential Address (2007)
Computer Programming
Computer programming is the process of designing and building an executable computer program to accomplish a specific computing result or to perform a specific task. Programming involves tasks such as: analysis, generating algorithms, profiling algorithms' accuracy and resource consumption, and the implementation of algorithms in a chosen programming language (commonly referred to as coding).
- wiki <-
- Blogging is common practice in the programming world. It's a great way
to learn new things and gain insight.
- find a few good bloggers in your field of choice, and take some time to understand what they're doing and why.
- Prevent Default
- It is clear that the future of organized web development is
embedded in the Cloud. :(
- Github, AWS, Google Cloud, Azure.. are all excellent tools.
- These services become a core part of your deployment pipeline, many of them are quite complex. The features you use are likely to be based on a subscription (monthly/yearly fee), pay-as-you-go model (Gb, /Hr), or even through a third-party extension (/gasp).
- These factors lead to a new level of meta-programming in which you create hacks to support your workflow, reduce costs, and integrate with your internal infrastructure. This is the 10th circle of Hell in which engineers and network specialists need to Read The Docs and become subject matter experts themselves.
- Is there a better way?
- For conventional orgs, probably not.
- For the one-man army or isolated tribe of hackers.. perhaps.
- Build it yourself!
- Own your data.
- Develop in distributed silos or 'labs'.
- Self-host services.
- The History of Programming Languages
- A wonderful visual history reference
- RFC 8439 - ChaCha20 and Poly1305 for IETF Protocols
- Salsa20 - Wikipedia
- ChaCha variant - most common stream cipher nowadays.
- Stream cipher - Wikipedia
- dalek cryptography love this site design
- The Dangers of Self-Signed Certificates | Okta Developer
- RFC 7748 - Elliptic Curves for Security
- defines some familiar elliptical curves for practical security, including in TLS. They work at ~128-bit and ~224-bit security levels.
- RFC 5116 - An Interface and Algorithms for Authenticated Encryption
- AEAD descriptions - we're usually going for a form of this approach with MAC+Encrypt
- RFC 2104 - HMAC: Keyed-Hashing for Message Authentication
- HMAC - often used with MD5, SHA-1, etc, plus a secret shared key. Key Hashing
- Engineering deep dive: Encoding of SCTs in certificates - Let's Encrypt - Free SSL/TLS Certificates
- https://www.educative.io/edpresso/what-is-hashing
- the process of digitally signing executable data as a means of validating authenticity and integrity.
- The UNIX-HATERS Handbook “Two of the most famous products of Berkeley are LSD and Unix. I don’t think that is a coincidence.”
- Metafunctions and Higher-Order Metaprogramming - boost C++
- I personally prefer 2-space indent just about everywhere. spaces >
tabs, but 4 spaces is too much.
There are exceptions to this of course - Emacs-lisp is a big one considering that best-practice is often to vertically align elements.
For example, this is considered good formatting:
(format "%a %b" thing1 thing2)
And this is bad formatting:
(format "%a %b" thing1 thing2)
In fact, adding my strict 2-space preference would be even worse formatting.
- Makefiles are another good example. the
TAB
character is the default indent, so you can either accept it or add an assignment for the special variable.RECIPEPREFIX
that gets added to all of your Makefiles. I go for the former since it has better integration with IDEs (which often expect TABs and may warn you about invalid syntax, despite the.RECIPEPREFIX
assignment)
- Declarative https://en.wikipedia.org/wiki/Declarative_programming
- Imperative
https://en.wikipedia.org/wiki/Imperative_programming
- FORTRAN
- OOP
https://en.wikipedia.org/wiki/Object-oriented_programming
Object-oriented Programming (OOP for short) is a programming model
that organizes code around objects, and emphasizes the focus on
objects that we want to manipulate, rather than the functions and
logic necessary to manipulate them.
- Objects Objects can be definied as data fields that have unique attributes and behavior. They are most often identified through data modeling, which is the practice of organizing an Information system by applying a variety of formal techniques.
- Principles of OOP
- Encapsulation
- Abstraction
- Inheritance
- Polymorphism
Array-based
In computer science, array programming refers to solutions which allow the application of operations to an entire set of values at once. Such solutions are commonly used in scientific and engineering settings. – Wikipedia
- languages include Fortran, APL, J, K, Octave, BQN
- opposed to scalar languages like C and Pascal with can apply operations only to single values, so need to make use of control structures such as indexing and looping.
- Literate
- HTML Standard
- HTML - Wikipedia
- draft-ietf-html-spec-00
- <> = tag, encapsulates 'elements'
- Everything you need to learn the basic HTML spec is included in modern web browsers. To get started, right click anywhere on a webpage and 'Inspect Element'.
- The Living Spec is HTML5. It includes a bunch of modern-era elements
like
<canvas>
<video>
<audio>
<main>
. - The term
HTML
is somewhat of a cluster nowadays - it can refer to anything X/HTML/5 or HTML-like. When building systems that leverageHTML
, it is important to understand to the differences between implementations of HTML parsers across different programs and libraries. Read the docs. - ETL
- ELT
- Data Warehouse
- Data Mart
- Data Lake
- ELF
- linker sections:
- text contains the program instructions
- rodata contains constant values like strings
- data contains statically allocated variables whose initial values are not zero
- bss also contains statically allocated variables whose initial values are zero
- vector_table is a non-standard section that we use to store the vector (interrupt) table
- ARM.attributes and the .debug_* sections contain metadata and will not be loaded onto the target when flashing the binary.
- linker sections:
- Growing a Language - Guy Steele [1998]
_ahvzDzKdB0 - https://en.wikipedia.org/wiki/C_(programming_language)
- C Language Reference | Microsoft Docs
- The GNU C Reference Manual
- C language - cppreference.com
- cppreference.com
Redditor comment regarding the C++ ecosystem
- This Redditor with 12y of XP writing C++ talks about all the
complexities involved with coding in C++. OP is asking about some of the nuances of Rust vs. C++, and our Redditor avoids regurgitating the common arguments that are given for Rust in favor of C++ - namely Memory Safety and Data Races. A fitting quote from Nietszche is given as explanation for not addressing those issues:
Whoever fights with monsters should see to it that he does not become a monster in the process. And when you gaze long into an abyss the abyss also gazes into you
– Friedrich Nietzsche
- The Rust Book
- Rust By Example
-
rustc is the Rust compiler. It is rarely invoked directly by the programmer, but rather indirectly through Cargo. Use the
--verbose
flag to see howrustc
is called, for example in:cargo build --verbose
The compiler has many options.
rustc --help
Usage: rustc [OPTIONS] INPUT Options: -h, --help Display this message --cfg SPEC Configure the compilation environment -L [KIND=]PATH Add a directory to the library search path. The optional KIND can be one of dependency, crate, native, framework, or all (the default). -l [KIND[:MODIFIERS]=]NAME[:RENAME] Link the generated crate(s) to the specified native library NAME. The optional KIND can be one of static, framework, or dylib (the default). Optional comma separated MODIFIERS (bundle|verbatim|whole-archive|as-needed) may be specified each with a prefix of either '+' to enable or '-' to disable. --crate-type [bin|lib|rlib|dylib|cdylib|staticlib|proc-macro] Comma separated list of types of crates for the compiler to emit --crate-name NAME Specify the name of the crate being built --edition 2015|2018|2021|2024 Specify which edition of the compiler to use when compiling code. --emit [asm|llvm-bc|llvm-ir|obj|metadata|link|dep-info|mir] Comma separated list of types of output for the compiler to emit --print [crate-name|file-names|sysroot|target-libdir|cfg|target-list|target-cpus|target-features|relocation-models|code-models|tls-models|target-spec-json|native-static-libs|stack-protector-strategies|link-args] Compiler information to print on stdout -g Equivalent to -C debuginfo=2 -O Equivalent to -C opt-level=2 -o FILENAME Write output to <filename> --out-dir DIR Write output to compiler-chosen filename in <dir> --explain OPT Provide a detailed explanation of an error message --test Build a test harness --target TARGET Target triple for which the code is compiled -A, --allow LINT Set lint allowed -W, --warn LINT Set lint warnings --force-warn LINT Set lint force-warn -D, --deny LINT Set lint denied -F, --forbid LINT Set lint forbidden --cap-lints LEVEL Set the most restrictive lint level. More restrictive lints are capped at this level -C, --codegen OPT[=VALUE] Set a codegen option -V, --version Print version info and exit -v, --verbose Use verbose output Additional help: -C help Print codegen options -W help Print 'lint' options and default settings -Z help Print unstable compiler options --help -v Print the full set of options rustc accepts
- The Cargo Book
- Philosophies of Rust and Haskell :hs:
- Rust cryptography libraries: A comprehensive list - LogRocket Blog
- GitHub - dalek-cryptography/bulletproofs: A pure-Rust implementation of Bulle…
- heapsize - syn proc_macro example
- redox-os · GitLab
- Embedded Rust documentation
- GitHub - rust-embedded/wg: Coordination repository of the embedded devices Working Group
- xtensa-rust-quickstart/main.rs at master · MabezDev/xtensa-rust-quickstart · GitHub
- rust/config.rs . github
- Async iterators and generators - JakeArchibald.com
- Introduction - Rust and WebAssembly
- GStreamer / gstreamer-rs · GitLab
- why async fn in traits are hard :async:
- aquamarine :docs:ui:drawing:
- mermaid.js-powered inline dot
- std::pin - Rust
- https://crates.io/crates/pin-project
-
- todo macros for code that is not yet written -
unimplemented!
makes no such claims.
- todo macros for code that is not yet written -
- Traits that should be in std, but aren't - libs - Rust Internals
- Macros in Rust :macros:
- The Little Book of Rust Macros :macros:
- HAL design pattern checklist
- Haskell Language
- Haskell is Faster than Rust! … Wait a Sec! – akquinet AG – Blog
- hledger
- Erlang Programming Language
- Getting Started with Erlang (PDF)
- Introduction | Learn You Some Erlang for Great Good!
- GitHub - erlang/otp: Erlang/OTP
- matt's web protocol experiments in erlang
- Real Programmers Don't Use Pascal
APL is the OG array PL
- inspired many other modern languages and concept models from spreadsheets to functional to DSLs.
- A Programming Language, 1962
Applied mathematics is largely concerned with the design and analysis of explicit procedures for calculating the exact or approximate values of various functions. Such explicit procedures are called algorithms or programs. Because an effective notation for the description of programs exhibits considerable syntactic structure, it is called a programming language.
- APLcart - Find your way in APL
- Talk:APL - HaskellWiki
- APL and Haskell quick comparison
https://youtube.com/watch?v=QtvvQ7MdwKY - APL keyboard layout
- TryAPL
- some great youtube tutorials and problem walkthroughs available from code_report
- Essays/Incunabulum - J Wiki
- BQN: finally, an APL for your flying saucer
- Why use BQN?
- BQN tutorials
ligatures everywhere 8)
- expressions
- +-×÷⋆√˜⁼˙∘
- literals = char, num
- primitives = functions, modifiers
- 1-modifiers = superscript
- 2-modifiers = unbroken circlers
- other primitives are always functions
- to try out BQN, use the BQN online REPL it's helpful with debugging since it shows the interpreted structure via evaluation diagram
BQN's grammar is governed by syntactic roles.
Precedence Role Input roles Output role Associativity 0 () Whatever Same thing (none) 1 Modifier Function, subject Function left-to-right 2 Function Subject subject Right-to-left
- lists
- ∾≍⌽↕¨´
- companies made with 1d (K) by Arthur Whitney : Kx Systems , shakti
a string is a list of characters
"Text!"
list notation uses angle brackets, ',', newline, and '⋄' are interchangeable separators
⟨ π, ∘, "element" ⋄ ⟨'l',1,5,'t'⟩ ⟩
strands are an alternative notation for lists: '‿'
>> 2 × ⟨0‿2 ⋄ 1‿3‿5⟩ ⟨ ⟨ 0 4 ⟩ ⟨ 2 6 10 ⟩ ⟩ >> ⟨ 10, 20‿30 ⟩ + ⟨ 1‿2, 3 ⟩ ⟨ ⟨ 11 12 ⟩ ⟨ 23 33 ⟩ ⟩
- '≍' is the function for making one or two atom arguments into a list. Solo in the one-arg case, couple in the two.
'∾' is Join To (inverted lazy S), which concatenates lists
>> ⟨1,2,3⟩ ∾ "abc" ⟨ 1 2 3 'a' 'b' 'c' ⟩ >> 0 ∾ ⟨1,2,3⟩ ⟨ 0 1 2 3 ⟩ >> "plural" ∾ 's' "plurals"
'⌽' is Reverse - puts a list back to front
>> ⌽ "drawer" "reward"
with a left argument, means Rotate which shifts values over by a specified amount. positive rotates left, negative roates right.
- '¨' is the 1-modifier Each which applies the operand to every element of a list argument - it's the same as map in a functional programming language. with two list arguments (with the same length), the elements of each list are paired - like a zip function.
- '´' is Fold - reduce or accumulate functions such as `+´` which sums a list
- '↕' Range - returns all natural numbers less than subject
- natural numbers start at 0 (naturally)
- combinators
<>≠=≤≥≡≢○⊸⟜
Tacit programming does not use variables during the execution of a function (but you might use them for convenience in order to construct a tacit program). Variables allow you to use any accessible value in the program with the same level of ease. Tacit code doesn't. In fact it becomes pretty unusable when more than about three values are active at once. One consequence is that tacit code won't cause confusion by modifying far-away variables. But something unique to the tacit paradigm is that when only a small number of values are active—which is always true in a small enough portion of a program!—it has more powerful ways to describe the way these values flow through the program. The main way it achieves this is with combinators.
booleans are represented by the natural numbers 0 and 1, no built-in primitives for this. the concept and power behind this is seen in how counts and occurences work -
>> 'e' = "George Boole" ⟨ 0 1 0 0 0 1 0 0 0 0 0 1 ⟩ >> +´ 'e' = "George Boole" 3 >> 'e' +´∘= "George Boole" # With a combinator 3
- '⋆⟜-' is "Power After Negation"
- '⋆⊸-' is "Exponent Before Subtracting"
- of course have one-arg or two arg-case of Before and After, structure of application is the same.
introduced the Not function - holy crap! ¬x == 1-x gives us multiple ways to write some interesting things
>> ¬⊸× 0.5 0.25
- reintroducing fact that modifiers can be assigned to data values, also, data values can be applied as functions. specifically constant functions that just return themselves
consider the following improvement to a previous example for use of number as const function using Range
>> ↕⊸÷⟜(-⟜1) 8 ⟨ 0 0.14285714285714285 0.2857142857142857 0.42857142857142855 0.5714285714285714 0.7142857142857143 0.8571428571428571 1 ⟩
or with a train, simply
(↕÷-⟜1) 8
our new base-decode function:
(@+ ·+⟜(2⊸×)´∘⌽¨ -⟜'0') "01000010"‿"01010001"‿"01001110"
- using a data value as the left operand of Before or the right operand of After is called Bind because it attaches that data value as an argument to the other operand
- variables
∧∨¬⊣⊢↑↓«»⌾
To take a proud denizen of the eternal cosmos of values, held for a fleeting instant by the course of code, and bind it. Tie it down with a name, failing always to alter its inner nature but allowing context to reform its outer appearance. So labelled, perhaps through the progress of time it will know escape, or else find itself passed through one bond to another, ever tethered. It's a task to be approached only with respect.
>> hey ← "Hi there" >> hey ∾ ", World!" "Hi there, World!"
> lol
- ← is used for declare and assign
- ↩ is just assign (after already declared)
- oh my variables have roles too
- lowercase = subject
- Uppercase = function
- _leftUnderscore = 1-modifier
- \_twoUnderscores = 2-modifier
- docs">
- how to run BQN
CBQN is the primary offline implementation - there is also a mostly usable javascript implementation. -
Probably you can figure out the easy things like calling bqn("×´1+↕6") to compute six factorial. But how do you get JS and BQN to talk to each other, for example to compute the factorial of a number n? Constructing a source string with bqn("×´1+↕"+n) isn't the best way—in fact I would recommend you never use this strategy.
Instead, return a function from BQN and call it: bqn("{×´1+↕𝕩}")(n). This strategy also has the advantage that you can store the function, so that it will only be compiled once. Define let fact = bqn("{×´1+↕𝕩}"); at the top of your program and use it as a function elsewhere.
- github/cannadayr/ebqn: A BQN virtual machine in Erlang
example of BQN characters
+-×÷⋆√⌊⌈∧∨¬|=≠≤<>≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔ `˜˘¨⁼⌜´˝˙ ∘⊸⟜○⌾⎉⚇⍟⊘◶⎊ π‿∞‿@↩←⇐→,⋄ 𝕨𝕩𝔽𝔾𝕎𝕏𝕗𝕘𝕊𝕤ℝ𝕣⦃⦄⟨⟩
See glyphs.bqn
- Programming in K
- k impls
- http://nsl.com/k/training/idioms_K3.pdf - k2/k3 version
- Arthur Whitney's array programming language
- many dialects, the OG ones are proprietary, there are OSS alternatives.
- K (programming language)
- ngn/k is the dialect I'm using to learn
- see this repo for examples of Arthur Whitney's programming style. the side-by-side buddy allocator implementations are quite thought provoking. Arthur's version is 11 lines, the idiomatic documented C version is almost 750. b.c
In computerized society where individuality is diminished, there are those who find little or no satisfaction in strict conformity to stereotyped thinking and are searching for their own answers to life's questions and how best to live, work and find inspiration.
Although little is known about what transpired during his brief visit to the Northern Venice, the idea Arthur conceived during that trip is much better known — he had a clear and uncompromising vision of a new system.
In 1992, Whitney departed from Morgan Stanley to fully concentrate on the design of a new computer language.
- +/kei | K reference card
- https://kparc.com/
- Coding Guidelines · kevinlawler/kona
- BQN: Wild claims about K performance
- k crash course - HackMD latest update of kcc from github
- shakti homepage
- you can download the evaluation version of shakti for 30-days without charge. The enterprise version is where some of the premium features are though.
- Shakti k9 tutorials
compared to the other dialects, this is a huge amount of docs. - there is also kdb/kdb+ with the Q programming language. Also proprietary.
- As far as I know, Arthur is working more heavily on the DB side - kdb+ has web APIs, FFI (for Rust too!), IPC, ML, you name it. shakti plays well with these.
- Freeware is software that is free to use, NOT to be confused with Free Software
- It is important to distinguish Freeware from truly Free Software, as the terms carry very different connotations. All Free Software is also Freeware, but not all Freeware is Free Software.
- https://www.gnu.org/software/make/manual/make.html
- Loading Objects : You can load dynamic objects into Makefiles with
the
load
keyword.- Such an object might include new
make
functions and a 'setup' function for registering them with GNUmake
's function handling system.
- Such an object might include new
- Loading Objects : You can load dynamic objects into Makefiles with
the
1. Algorithms algo
a process or set of rules to be followed in calculations or other problem-solving operations, especially by a computer.
1.0.2. Binary Search search
- A very common algorithm used to find the index of a specific item in a
sorted array.
- Array must be sorted
- Executes in logarithmic time
- Faster than linear search (except for very small arrays)
- Can be applied easily in many situations
- There are many variations of binary search such as fractional cascading and exponential search
- Many data structures provide a better overall design for fast optimal searches, such as Hash Tables
- Binary Search Tutorials & Notes | Algorithms | HackerEarth
1.0.3. Merge sort sort
A divide and conquer algorithm for sorting an array. The array is split into immutable chunks and then all chunks are merged in sorted order.
- Invented by John von Neumann in 1945
1.0.4. Lubachevsky–Stillinger algorithm granular_flow
Lubachevsky-Stillinger (compression) algorithm (LS algorithm, LSA, or LS protocol) is a numerical procedure suggested by F. H. Stillinger and B.D. Lubachevsky that simulates or imitates a physical process of compressing an assembly of hard particles. As the LSA may need thousands of arithmetic operations even for a few particles, it is usually carried out on a computer.
An acoustic phenomena of interest: Singing sand
1.0.6. ROT13 cipher
A very simple, symmetrical substition cipher that shifts a character by 13 positions. Since the standard alphabet has 26 characters, this operation is its own inverse.
- The canonical example of weak encryption.
2. Networks net
2.1. Models
2.1.1. Client-Server Model
- https://en.wikipedia.org/wiki/Client%E2%80%93server_model
- A distributed application architecture model
- usually used to describe a networked service where multiple Clients communicate with a single Server
- The term 'work' is used to describe the inputs and outputs of such a
model. The 'work' performed is strictly scoped.
- For example, consider the architecture for an MMO video game. The
client-server model applies to the design of Players (
Clients
) connecting to a match, which is hosted on the game server (Server
). The 'work' performed here may include updates to a Player's in-game position based on control input, chat messages, connection status, etc. - In addition to communicating with the game server, Players may
establish direct connection to other Players in their match in a
client-to-client or decentralized manner, where 'work' is
shared and managed between the
Clients
themselves, under authority of theServer
. This is where terminology begins to miss the point, as these features share a likeness to p2p networking.
- For example, consider the architecture for an MMO video game. The
client-server model applies to the design of Players (
2.1.2. Peer-to-peer Networking
Peer-to-peer (P2P) computing or networking is a distributed application architecture that partitions tasks or workloads between peers. Peers are equally privileged, equipotent participants in the application. They are said to form a peer-to-peer network of nodes.
Peers make a portion of their resources, such as processing power, disk storage or network bandwidth, directly available to other network participants, without the need for central coordination by servers or stable hosts. Peers are both suppliers and consumers of resources, in contrast to the traditional client–server model in which the consumption and supply of resources is divided.
2.2. Protocols
2.2.1. TCP transport
Transport Control Protocol
2.2.2. UDP transport
- User Datagram Protocol
- https://tools.ietf.org/html/rfc768
- Speed Up Machine-to-Machine Networking with UDP
- UDP vs TCP
- UDP and TCP share the same space in a network stack and operate on top of the IP protocol.
UDP has no built-in notion of State, TCP does. However, stateless protocols can be built on lower-level stateful ones.. and vice-versa. It's just a matter of abstraction.
- for example
HTTP
is a stateless protocol, built
on TCP (stateful), which is built on IP (stateless)
- for example
- TCP provides connection guarantees that a client receives
packets IN ORDER and exactly in the condition they were sent
(thanks to checksums in headers), at the cost of some performance
(to ensure packet sequencing, checking headers, establishing
connection, etc)
- UDP does NOT provide connection guarantees.
- UDP does have checksums though, and thus ensures packets are received in same condition that they were sent.
- Packets can be sent and lost, it doesn't intrinsically matter in UDP that the client didn't receive them.
- The loss of built-in guarantees does come with a performance boost though, as well as a network protocol that is quite flexible in its simplicity.
- UDP does NOT provide connection guarantees.
- The need for speed
UDP is on the rise in networks due to the usage of P2P services, and the need for more immediate methods of streaming media data at scale. Analyzing UDP usage in Internet traffic
- resources
2.2.3. TLS
Transport Layer Security
2.2.4. HTTP
Hypertext Transfer Protocol (HTTP) is an application-layer protocol for transmitting hypermedia documents, such as HTML. It was designed for communication between web browsers and web servers, but it can also be used for other purposes. HTTP follows a classical client-server model, with a client opening a connection to make a request, then waiting until it receives a response. HTTP is a stateless protocol, meaning that the server does not keep any data (state) between two requests. Though often based on a TCP/IP layer, it can be used on any reliable transport layer, that is, a protocol that doesn't lose messages silently like UDP does. RUDP — the reliable update of UDP — is a suitable alternative.
- HTTPS
HTTPS consists of HTTP with the addition of TLS.
- HTTP/S
HTTP/S is often used as a blanket statement for both HTTP and HTTPS.
2.2.5. WebSocket
- rfc
- 6455
- (no term)
- layer on top of TCP
- (no term)
- The WebSocket API (WebSockets) - Web APIs | MDN
2.2.6. QUIC
-
Transport-layer network protocol, part of the Chromium project.
- Leverages the benefits of building on top of UDP instead of TCP
- Designed as a re-implementation of TCP+TLS+HTTP/2
- Great documentation (ty Mr. Google) + has Rust implementations (yay!) which leads us to:
- Quinn
- Rust implementation of the QUIC protocol.
- Super awesome-cool
- provides an API built with tokio
- provides the core deterministic state machine of the protocol
via
quinn-proto
- Playing With QUIC provides documentation on how to set up a test client/server from the chromium source, a bit verbose for our needs but relevant
- QUIC at 10,000 feet net
- src <-
- drafts
2.3. links
- RFC 6815 - Applicability Statement for RFC 2544: Use on Production Networks Considered Harmful
- Connected: An Internet Encyclopedia
- RFC 1831
- XDR: External Data Representation Standard
- seems bulky, but very useful reference due to the breakdown of different types and their definitions.
- Michalis Polychronakis cool d00d - interesting research
- http://an.kaist.ac.kr/~shinae/paper/2016-netsoft.pdf
Exploiting Integrated GPUs for Network Packet Processing Workloads
- netsoft 2016
- RTP Streaming Commands — Kurento 6.9.0 documentation
- Ephemeral port - Wikipedia
- Multiplexing - Wikipedia
- Frequency-division multiplexing - Wikipedia
- Wavelength-division multiplexing - Wikipedia
- Polarization-division multiplexing - Wikipedia
- Time-division multiplexing - Wikipedia
- Orbital angular momentum multiplexing - Wikipedia
- Fiber-optic communication - Wikipedia
- Photophone - Wikipedia
- Routing Information Protocol - Wikipedia
- Satellite navigation - Wikipedia Position, Navigation, and Timing
- Time signal - Wikipedia
- Precision Time Protocol - Wikipedia
- P802.1AS-Rev – Timing and Synchronization for Time-Sensitive Applications |
- Network speaker - Wikipedia
- brief mention of CambridgeMatrix - hunt this down
- Everything I've found on the Strawberry Fair is unvalidated, online articles discussing the implementation of custom mesh network on June 3rd, 2006 are just copy/pasting the Wiki.
- original article is here (DNS broked) http://www.cambridgeshiretouristguide.com/Articles/Article_55.asp - trying to find it on web.archive, will search YouTube later
- CambridgeMatrix sounds like a lead, would be surprised if there is no connection to the Strawberry Fair
- Hazy Sighted Link State Routing Protocol - Wikipedia link-state algorithm at CUWiN
- Expected transmission count - Wikipedia
- Software: Distributed Systems and Networks Lab C src from the lads over at JHU from da Italians
- Optical mesh network - Wikipedia
- Free-space optical communication - Wikipedia
- Visible Light Communications Consotium (VLCC) - What's Visible Light Communications?
- High Speed Visible Light Communication Systems - pdf researchgate
- Visible light communication - Wikipedia
- Mesh networking - Wikipedia
- InfiniBand - Wikipedia
- Anycast - Wikipedia
- unicast, broadcast, multicast, anycast, geocast
- Multicast - Wikipedia
- Anatomy of a SYN-ACK attack - Akamai Security Intelligence and Threat Research Blog