-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.yaml
157 lines (137 loc) · 6.62 KB
/
index.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
slug: index
see:
- label: Q Promises
href: ./q.yaml
- label: Collections
href: ./collections.yaml
- label: Operators
href: ./operators.yaml
- label: Change Observers
href: ./observers.yaml
- label: Bindings
href: ./bindings.yaml
- label: Module System
href: ./system.yaml
- label: Guten Tag, HTML Modules!
href: ./gutentag.yaml
# - label: Packages and Modules
# href: ./packages.yaml
# - label: Collections and Operators
# href: ./collections.yaml
# - label: Reactivity
# - label: The Front
# - label: The Back
# - label: And Back Again
# href: ./adventure.yaml
--- |
# A Cohort of Packages
Long ago, I set out with my friend, [Ryan Paul][], on a quest to create a text
adventure for a new generation.
Ryan used to run a MUD called *Magic of Middle-earth*, based on the [SMAUG][]
engine.
I was attracted to the richenss of potential in the creactive medium of
description, narrative, and interaction.
Ryan went on to write the open source column for [Ars Technica][] for many
years and has since done technical evangelism for [Xamarin][], [MontageJS][],
and [RethinkDB][].
[Ryan Paul]: https://twitter.com/segphault
[SMAUG]: https://en.wikipedia.org/wiki/SMAUG
[Ars Technica]: http://arstechnica.com/
[Xamarin]: http://xamarin.com/
[MontageJS]: http://montagestudio.com/montagejs/
[RethinkDB]: http://rethinkdb.com/
Imagining and reimagining this project has been the braid that connects nearly
every project I have worked on since.
As an artist, this journey led me to learn Inkscape and how to pen calligraphy.
As a Tolkienist, it led me to learn how to transcribe Elvish, make a [map of
Middle-earth](http://3rin.gs), and build [tengwar](http://3rin.gs/tengwar/)
[transcribers](http://gutentags.github.io/tengwar.html/).
As a young programmer, I learned [XUL][] and how to make Firefox extensions, so
I could take advantage of XPConnect's TCP socket.
I learned Perl to hack out CGI essays.
It led me to learn how to images with text server side using the [Python
Imaging Library][PIL].
[XUL]: https://en.wikipedia.org/wiki/XUL
[PIL]: http://www.pythonware.com/products/pil/
I learned C++, template metaprogramming, and BSD socket server programming in
an ill-fated attempt to rebuild the game engine with a more modular design.
I learned Python and Twisted in another [ill-fated
attempt](https://github.com/kriskowal/planes) to rebuild the engine.
Through this project, another friend, [Ryan Witt][], introduced me to
[Chord][], a peer to peer distributed hash table algorithm, and [Quadtrees][],
which seemed like the obvious way to shard a massive MUD engine.
[Ryan Witt]: https://twitter.com/onecreativenerd
[Chord]: https://en.wikipedia.org/wiki/Chord_(peer-to-peer)
[Quadtrees]: https://en.wikipedia.org/wiki/Quadtree
And when I decided to reimagine the game as a web client, web sockets were on
the horizon and it became quickly obvious that JavaScript did not have a
module system.
So I studied the problem and ultimately wrote the [CommonJS][] module system,
popularized by [Node.js][].
In turn, searching for allies to make JavaScript modules a reality led me to
meet [Mark S. Miller][] who in turn introduced me to both [TC39][] and
[Promises][ERights].
Mark introduced me to the work of [Tyler Close][], who had created the
primordial Q library from which I wrought [Q][] for [npm][].
[Domenic Denicola][] eventually joined me and became instrumental not only in
evolving and maintaining Q, but carrying Mark’s and my designs into ECMAScript
2015.
[CommonJS]: http://wiki.commonjs.org/wiki/Modules
[Node.js]: https://nodejs.org/
[npm]: https://www.npmjs.com/
[Mark S. Miller]: https://en.wikipedia.org/wiki/Mark_S._Miller
[TC39]: https://esdiscuss.org/
[ERights]: http://www.erights.org/talks/thesis/
[Tyler Close]: http://www.waterken.com/about/
[Q]: https://github.com/kriskowal/q
[Domenic Denicola]: https://blog.domenic.me/
My mission to further the JavaScript module system led to a collaboration with
[Tom Robinson][] of [280 North][] on [NarwhalJS][] and eventually that led me
to join Motorola to work on [MontageJS][], another MVC framework for the web
inspired by [Cocoa][].
Working on Montage, I eventually also took over the maintenance of its
synchronous data bindings system and wrote [Collections][] and [FRB][],
adapting parts of what was already there written by [Antonio Afonso][], [Mike
Czepiel][], and [Francois Frisch][] under he direction of [Benoît Marchant][]
and [Pierre Frisch][].
[Stuart Knightly][] has since been instrumental in the collections effort,
particularly the initiative to create the documentation on
[collectionsjs.com](http://www.collectionsjs.com/).
[Tom Robinson]: https://twitter.com/tlrobinson
[Collections]: https://github.com/kriskowal/collections
[280 North]: https://en.wikipedia.org/wiki/280_North,_Inc.
[NarwhalJS]: https://github.com/280north/narwhal
[Cocoa]: https://en.wikipedia.org/wiki/Cocoa_(API)
[FRB]: https://github.com/montagejs/frb
[Antonio Afonso]: https://twitter.com/aadsm
[Mike Czepiel]: https://twitter.com/mczepiel
[Francois Frisch]: https://twitter.com/francoisfrisch
[Benoît Marchant]: https://twitter.com/benoitmarchant
[Pierre Frisch]: https://www.linkedin.com/in/pierrefrisch
[Stuart Knightly]: https://twitter.com/stuk
I now work at Uber on a distributed system that incorporates a Chord-like
ring called [Ringpop][], a robust connection pooling and RPC multiplexing
system called [TChannel][], and an elastic service index and network overlay
that combines them.
This has given me a chance to get my hands on a real distributed system
that so closely resembles some of those nascent designs for a distributed MUD
and work with fantastic engineers including [Jake Verbaten][] (known by most as
Raynos), [Joshua Corbin][], [Jeff Wolski][], and our architect [Matt Ranney][].
[Ringpop]: https://github.com/uber/ringpop
[TChannel]: https://github.com/uber/tchannel
[Jake Verbaten]: https://twitter.com/raynos
[Joshua Corbin]: https://twitter.com/JoshuaTCorbin
[Jeff Wolski]: https://github.com/jwolski
[Matt Ranney]: https://twitter.com/mranney
Fundamental programming concepts, including modules, asynchronous IO and event
loops, promises and actors, synchronous and asynchronous bindings, operational
transforms, collections, streams, and RPC it seems to me are all part of a
coherent story, a story that starts for me with a deceptively low-fidelity
simulation game.
To that end, I have published upward of 60 carefully designed, loosely coupled,
but coherent JavaScript modules to [Github][] and [npm][], and have intentions
and designs to, hopefully with your help, expand this territory.
[Github]: https://github.com/kriskowal
This is a catalog of those JavaScript packages and the ongoing effort to expand
upon them.
— Kris Kowal, 2015