reworked the site

This commit is contained in:
johncburnham 2014-08-08 20:36:35 -07:00
parent 15b335d4c4
commit be038f4c11
41 changed files with 187 additions and 2779 deletions

View File

@ -1,75 +0,0 @@
::
::
::::
::
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
::
:::: ~tomsyt-balsen
::
;html
;head
;title: Urbit: Personal Cloud Computing
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div(class "page documentation")
;h1(class "page-title"): Documentation
;p ; If you want to build a deep understanding of how Urbit works,
; start with Nock. If you would prefer to just try stuff
; out, start with Arvo.
==
;p ; This documentation is a work in progress. Feedback and corrections
; are welcome. Pull requests are encouraged. The repo for this site
; lives ;{a(href "https://github.com/urbit/urbit.github.io") "here"}.
; We would love your help in making this reference more useful.
==
;p ; Arvo is still actively being changed and updated.
; As Arvo development cools, more documentation will emerge.
==
;ul
;li
;p:(h2:"Tutorial")
;strong: Nock
;ol
;li:(p:(a/"/gen/main/pub/fab/site/tut/nock1":"Intro to Nock"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/nock2":"Nock is Easy"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/nock3":"Using Nock"))
==
;strong: Hoon
;ol
;li:(p:(a/"/gen/main/pub/fab/site/tut/hoon1":"Intro to Hoon"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/hoon2":"Types"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/hoon3":"Hoon Computes"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/hoon4":"Gates"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/hoon5":"Tiles"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/hoon6":"Type Inference"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/hoon7":"Odds, Ends, Quirks"))
==
;strong: Arvo
;ol
;li:(p:(a/"/gen/main/pub/fab/site/tut/arvo1":"Basic Arvo"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/arvo2":"More Basic Arvo"))
==
==
;li
;p:(h2:"Reference")
;ul
;li:(p:(a/"/gen/main/pub/fab/site/ref/foreword":";{strong "Foreword"}: Nock"))
;li:(p:(a/"/gen/main/pub/fab/site/ref/preface":";{strong "Preface"}: Hoon Abstract"))
;li:(p:(a/"/gen/main/pub/fab/site/ref/vol0":";{strong "Volume 0"}: Version Stub"))
;li:(p:(a/"/gen/main/pub/fab/site/ref/vol1":";{strong "Volume 1"}: Hoon Structures"))
;li:(p:(a/"/gen/main/pub/fab/site/ref/vol2":";{strong "Volume 2"}: Hoon Compiler"))
;li:(p:(a/"/gen/main/pub/fab/site/ref/vol3":";{strong "Volume 3"}: Arvo Core"))
;li:(p:(a/"/gen/main/pub/fab/site/ref/vol4":";{strong "Volume 4"}: Arvo Vanes"))
;li:(p:(a/"/gen/main/pub/fab/site/ref/postface":";{strong "Postface"}"))
==
==
==
==
==
==
==

View File

@ -1,26 +1,73 @@
:: Top level of the Urbit documentation.
::
:::: /hook/site/src/pub
::
::::
::
/= bod /^ manx /: /===/pub/src/doc/intro /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
/= sty /^ @t /: /===/pub/fab/site/styles /css/
::
:::: ~tomsyt-balsen
::
;html
;head
;title: Urbit
;title: Urbit: Personal Cloud Computing
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
;div(class "page documentation")
;h1(class "page-title"): Documentation
;p ; If you want to build a deep understanding of how Urbit works,
; start with Nock. If you would prefer to just try stuff
; out, start with Arvo.
==
;p ; This documentation is a work in progress. Feedback and corrections
; are welcome. Pull requests are encouraged. The repo for this site
; lives ;{a(href "https://github.com/urbit/urbit.github.io") "here"}.
; We would love your help in making this reference more useful.
==
;p ; Arvo is still actively being changed and updated.
; As Arvo development cools, more documentation will emerge.
==
;ul
;li
;p:(h2:"Tutorial")
;p:(a/"/gen/main/pub/fab/site/tut/setup":"Setup")
;strong: Nock
;ol
;li:(p:(a/"/gen/main/pub/fab/site/tut/nock1":"Intro to Nock"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/nock2":"Nock is Easy"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/nock3":"Using Nock"))
==
;strong: Hoon
;ol
;li:(p:(a/"/gen/main/pub/fab/site/tut/hoon1":"Intro to Hoon"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/hoon2":"Types"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/hoon3":"Hoon Computes"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/hoon4":"Gates"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/hoon5":"Tiles"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/hoon6":"Type Inference"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/hoon7":"Odds, Ends, Quirks"))
==
;strong: Arvo
;ol
;li:(p:(a/"/gen/main/pub/fab/site/tut/arvo1":"Basic Arvo"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/arvo2":"More Basic Arvo"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/arvo3":"Apps"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/arvo4":"Functional Publishing I"))
;li:(p:(a/"/gen/main/pub/fab/site/tut/arvo5":"Functional Publishing II"))
==
==
;li
;p:(h2:"Reference")
;p:(a/"/gen/main/pub/fab/site/ref/foreword":";{strong "Foreword"}: Nock")
;p:(a/"/gen/main/pub/fab/site/ref/preface":";{strong "Preface"}: Hoon Abstract")
;p:(a/"/gen/main/pub/fab/site/ref/vol0":";{strong "Volume 0"}: Version Stub")
;p:(a/"/gen/main/pub/fab/site/ref/vol1":";{strong "Volume 1"}: Hoon Structures")
;p:(a/"/gen/main/pub/fab/site/ref/vol2":";{strong "Volume 2"}: Hoon Compiler")
;p:(a/"/gen/main/pub/fab/site/ref/vol3":";{strong "Volume 3"}: Arvo Core")
;p:(a/"/gen/main/pub/fab/site/ref/vol4":";{strong "Volume 4"}: Arvo Vanes")
==
==
==
==
;+ fot
==
==
==

View File

@ -1,8 +1,6 @@
/= sty /^ @t /: /===/pub/fab/site/styles /css/
/= bod /^ manx /: /===/pub/src/doc/ref/nock /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
::
:::: ~tomsyt-balsen
::
@ -12,12 +10,10 @@
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
==
==
;+ fot
==
==

View File

@ -1,7 +1,5 @@
/= bod /^ manx /: /===/pub/src/doc/ref/vol0 /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
/= sty /^ @t /: /===/pub/fab/site/styles /css/
::
:::: ~tomsyt-balsen
::
@ -11,12 +9,10 @@
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
==
==
;+ fot
==
==

View File

@ -1,7 +1,5 @@
/= sty /^ @t /: /===/pub/fab/site/styles /css/
/= bod /^ manx /: /===/pub/src/doc/ref/vol1 /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
::
:::: ~tomsyt-balsen
::
@ -11,12 +9,10 @@
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
==
==
;+ fot
==
==

View File

@ -1,7 +1,5 @@
/= sty /^ @t /: /===/pub/fab/site/styles /css/
/= bod /^ manx /: /===/pub/src/doc/ref/vol2 /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
::
:::: ~tomsyt-balsen
::
@ -11,12 +9,10 @@
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
==
==
;+ fot
==
==

View File

@ -1,7 +1,5 @@
/= bod /^ manx /: /===/pub/src/doc/ref/vol0 /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
/= sty /^ @t /: /===/pub/fab/site/styles /css/
/= bod /^ manx /: /===/pub/src/doc/ref/vol3 /psal/
::
:::: ~tomsyt-balsen
::
@ -11,12 +9,10 @@
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
==
==
;+ fot
==
==

View File

@ -1,7 +1,5 @@
/= bod /^ manx /: /===/pub/src/doc/ref/vol0 /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
/= sty /^ @t /: /===/pub/fab/site/styles /css/
/= bod /^ manx /: /===/pub/src/doc/ref/vol4 /psal/
::
:::: ~tomsyt-balsen
::
@ -11,12 +9,10 @@
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
==
==
;+ fot
==
==

View File

@ -1,7 +1,5 @@
/= sty /^ @t /: /===/pub/fab/site/styles /css/
/= bod /^ manx /: /===/pub/src/doc/say/arvo/1 /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
::
:::: ~tomsyt-balsen
::
@ -11,12 +9,10 @@
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
==
==
;+ fot
==
==

View File

@ -1,7 +1,5 @@
/= sty /^ @t /: /===/pub/fab/site/styles /css/
/= bod /^ manx /: /===/pub/src/doc/say/arvo/2 /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
::
:::: ~tomsyt-balsen
::
@ -11,12 +9,10 @@
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
==
==
;+ fot
==
==

View File

@ -1,7 +1,5 @@
/= sty /^ @t /: /===/pub/fab/site/styles /css/
/= bod /^ manx /: /===/pub/src/doc/say/hoon/1 /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
::
:::: ~tomsyt-balsen
::
@ -11,12 +9,10 @@
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
==
==
;+ fot
==
==

View File

@ -1,7 +1,5 @@
/= sty /^ @t /: /===/pub/fab/site/styles /css/
/= bod /^ manx /: /===/pub/src/doc/say/hoon/2 /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
::
:::: ~tomsyt-balsen
::
@ -11,12 +9,10 @@
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
==
==
;+ fot
==
==

View File

@ -1,7 +1,5 @@
/= sty /^ @t /: /===/pub/fab/site/styles /css/
/= bod /^ manx /: /===/pub/src/doc/say/hoon/3 /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
::
:::: ~tomsyt-balsen
::
@ -11,12 +9,10 @@
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
==
==
;+ fot
==
==

View File

@ -1,7 +1,5 @@
/= sty /^ @t /: /===/pub/fab/site/styles /css/
/= bod /^ manx /: /===/pub/src/doc/say/hoon/4 /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
::
:::: ~tomsyt-balsen
::
@ -11,12 +9,10 @@
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
==
==
;+ fot
==
==

View File

@ -1,7 +1,5 @@
/= sty /^ @t /: /===/pub/fab/site/styles /css/
/= bod /^ manx /: /===/pub/src/doc/say/hoon/5 /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
::
:::: ~tomsyt-balsen
::
@ -11,12 +9,10 @@
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
==
==
;+ fot
==
==

View File

@ -1,7 +1,5 @@
/= sty /^ @t /: /===/pub/fab/site/styles /css/
/= bod /^ manx /: /===/pub/src/doc/say/hoon/6 /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
::
:::: ~tomsyt-balsen
::
@ -11,12 +9,10 @@
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
==
==
;+ fot
==
==

View File

@ -1,7 +1,5 @@
/= sty /^ @t /: /===/pub/fab/site/styles /css/
/= bod /^ manx /: /===/pub/src/doc/say/hoon/7 /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
::
:::: ~tomsyt-balsen
::
@ -11,12 +9,10 @@
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
==
==
;+ fot
==
==

View File

@ -1,7 +1,5 @@
/= bod /^ manx /: /===/pub/src/doc/say/nock/1 /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
/= sty /^ @t /: /===/pub/fab/site/styles /css/
::
:::: ~tomsyt-balsen
::
@ -11,12 +9,10 @@
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
==
==
;+ fot
==
==

View File

@ -1,7 +1,5 @@
/= bod /^ manx /: /===/pub/src/doc/say/nock/2 /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
/= sty /^ @t /: /===/pub/fab/site/styles /css/
::
:::: ~tomsyt-balsen
::
@ -11,12 +9,10 @@
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
==
==
;+ fot
==
==

View File

@ -1,7 +1,5 @@
/= sty /^ @t /: /===/pub/fab/site/styles /css/
/= bod /^ manx /: /===/pub/src/doc/say/nock/3 /psal/
/= sid /^ manx /: /===/pub/src/site/res/sidebar /hymn/
/= fot /^ manx /: /===/pub/src/site/res/footer /hymn/
/= sty /^ @t /: /===/pub/src/site/res/styles /css/
::
:::: ~tomsyt-balsen
::
@ -11,12 +9,10 @@
;style:"{(trip sty)}"
==
;body
;+ sid
;div(class "content container")
;div.subpage
;+ bod
==
==
;+ fot
==
==

View File

@ -1,55 +0,0 @@
#What is Urbit?
We got tired of system software from the 1970s. So we wrote our own. From scratch.
##Nock, a minimal virtual machine
[Nock](https://github.com/urbit/urbit/blob/master/urb/zod/spec/nock/5.txt) is a homoiconic combinator algebra, not much fancier than SKI combinators. The spec fits on a T-shirt and gzips to 340 bytes. Nock's data model is simple: a noun is an atom or a cell. An atom is any natural number. A cell is an ordered pair of any two nouns.
Nock cannot create cycles and needs no GC. Its only arithmetic operator is increment, so it is not inherently efficient; an efficient Nock interpreter works by recognizing standard Nock formulas and matching them to pre-written manual optimizations. We never extend Nock or call out to Unix from it.
##Hoon, a typed functional language
Hoon is a strict, typed, functional language that compiles itself to Nock. The Hoon compiler is 4000 lines of Hoon. Adding standard libraries, the self-compiling kernel is 8000 lines.
Hoon has no particular familial relationship to other languages you may know. It uses its own type inference algorithm and is as different from Haskell as from Lisp. Hoon syntax is also completely unfamiliar. Hoon has the same relationship to Nock that C has to assembly; as thin a layer as possible. It is possible to learn Hoon without Nock, but it's probably not a good idea.
As a functional systems language, Hoon is especially good at metaprogramming, self-virtualization, hotpatching; marshalling and validating untyped data; decoding and encoding binary message formats. Hoon is designed for event programming, so there is no concurrency model.
##Arvo, a functional operating system
Arvo is an event-driven server OS built on the same event library as node.js (libuv). Unlike node.js, Arvo is written in Hoon, isolated from Unix and a persistent single-level store. Arvo can update itself and its data and programs indefinitely from its own state. After the image is created, it lives indefinitely and is never modified externally.
Arvo is modular. Present modules provide a network messaging protocol, a REPL and task manager, a revision-controlled filesystem, a text console, and an HTTP server. The Arvo codebase is about 6500 lines, which is probably too big.
##Clay, a global immutable namespace
Clay is a feature of Arvo: a secure, referentially transparent and decentralized filesystem. The root of the namespace is a global PKI. Each identity serves its own filesystem tree. Files are nouns, not atoms, with arbitrary tree structure.
Identities, which are also routable addresses, are either key fingerprints or hierarchically assigned short numbers. All numbers are mapped to phonemic strings for memorability. Identities are transferrable and irrevocable; ownership is established by key pinning. The system has a superficial resemblance to Bitcoin, but works more like land than money. It does not use mining or a blockchain.
Since Clay is immutable, all paths contain a revision, which is either a change number, a date, or a label. A request is a special case of a subscription, so syndication is straightforward. Clay also has a synthesis mode which computes a functional namespace on the client side.
##What is Urbit good for?
Urbit is good for everything, of course! It is a new general-purpose computing layer. We look forward to a future where the current Internet exists only as an underground series of tubes which transports you to your Urbit.
More specifically, Urbit is a personal cloud computer. Right now, the cloud computers we use run OSes designed for minicomputers in the '70s. An ordinary user can no more drive a Linux box in the cloud than fly an A320. So she has to sit in coach class as a row in someone else's database. It's definitely air travel. It's not exactly flying.
The user of the future will fly her own computer. She will own and control her own identity and her own data. She will even host her own apps. She will not be part of someone else's Big Data. She will be her own Little Data. Unless she's a really severe geek, she will pay some service to store and execute her Urbit ship - but she can move it anywhere else, anytime, for the cost of the bandwidth.
A user can't manage a general-purpose computer unless she basically understands what it's doing. She may not be a programmer, but she needs at least a rough mental model of her computer's state.
A personal computer has to be a *simple* computer. This is why we built a new system software stack from scratch, with the goal of bringing it in under 10,000 lines of code. Urbit is about 50% over this complexity budget, but nobody's perfect.
##What can it do now?
Urbit at present is not good for anything but screwing around. For screwing around, it answers all your needs and is happy to consume any amount of unwanted time.
It does basically work as described above, though. Urbit at present propagates all its updates through its own filesystem, runs its own chat server over its own network protocol, etc. As of early 2014, it is an interesting prototype, not a useful device.
##How can I join the revolution?
Just wait. If you're cool enough, someone will send you an invitation.
Psych! No, actually, you can go here.

File diff suppressed because it is too large Load Diff

View File

@ -1,90 +1,90 @@
volume 3, Arvo models and skeleton
#volume 3, Arvo models and skeleton
++ arch
++ bead
++ care
++ case
++ desk
++ cage
++ chop
++ curd
++ disk
++ duct
++ gene
++ glob
++ herd
++ hilt
++ hypo
++ khan
++ lens
++ v
++ w
++ x
++ y
++ z
++ logo
++ lode
++ mark
++ mill
++ milt
++ monk
++ mold
++ muse
++ mosh
++ move
++ ovum
++ pane
++ pone
++ ship
++ sled
++ slut
++ vile
++ wire
++ slod
++ slub
++ arch
++ bead
++ care
++ case
++ desk
++ cage
++ chop
++ curd
++ disk
++ duct
++ gene
++ glob
++ herd
++ hilt
++ hypo
++ khan
++ lens
++ v
++ w
++ x
++ y
++ z
++ logo
++ lode
++ mark
++ mill
++ milt
++ monk
++ mold
++ muse
++ mosh
++ move
++ ovum
++ pane
++ pone
++ ship
++ sled
++ slut
++ vile
++ wire
++ slod
++ slub
section 3bE, Arvo core
##section 3bE, Arvo core
++ vent
++ ruck
++ wink
++ doze
++ sike
++ souk
++ sunk
++ song
++ spuc
++ sump
++ said
++ scry
++ soar
++ swim
++ vint
++ viol
++ is
++ beck
++ dink
++ dint
++ doos
++ hurl
++ race
++ fire
++ jack
++ kick
++ vent
++ ruck
++ wink
++ doze
++ sike
++ souk
++ sunk
++ song
++ spuc
++ sump
++ said
++ scry
++ soar
++ swim
++ vint
++ viol
++ is
++ beck
++ dink
++ dint
++ doos
++ hurl
++ race
++ fire
++ jack
++ kick
Postface
##Postface
++ come
++ keep
++ load
++ peek
++ poke
++ wish
++ come
++ keep
++ load
++ peek
++ poke
++ vega
++ veer
++ wish
++ come
++ keep
++ load
++ peek
++ poke
++ wish
++ come
++ keep
++ load
++ peek
++ poke
++ vega
++ veer
++ wish

View File

@ -1,391 +0,0 @@
---
layout: post
category: blog
author: cgy
title: Welcome to Urbit
date: 2013-9-24 15:00
---
But wait - what the hell is Urbit?
One of Urbit's problems is that we don't exactly have a word for
what Urbit is. If there is such a word, it somehow means both
"operating system" and "network protocol," while somehow also
implying "functional" and "deterministic."
Not only is there no such word, it's not even clear there
_should_ be one. And if there was, could we even hear it?
As Wittgenstein said: if a lion could talk, we would not
understand him. But heck, let's try anyway.
As a network protocol, we could call Urbit a "seven-layer
protocol" - that is, a protocol that specifies the complete
semantics of the general-purpose computer that processes it. As
any decent IETF ninja will tell you, this is a very bad idea for
all sorts of extremely obvious reasons.
And from the OS perspective, Urbit is yet another slice of
userspace crap with the temerity to call itself an "operating
system." Urbit is not actually an OS in the bare-metal sense.
It's a VM that runs on Linux or OS X. Someday it might be so
daring as to descend to Xen. Urbit has no interest at all in
drivers, peripherals, etc. It is just a UDP transceiver in the
cloud. Worst of all - Urbit is not even preemptive. A poser!
(Actually all the real work, as in node, is done by libuv.)
Moreover, this VM is formally isolated from your actual OS. And
everything that uses it. Nothing in Urbit can request system
services or call existing libraries. So Urbit is not only badly
designed and fraudulently hyped. It's also profoundly useless.
Well... your browser has been reasonably successful with this
restriction. But your browser was never designed to be any kind
of OS. To the extent that it's sort of become an OS, it is
specialized for the very undemanding job of being a client. A
general-purpose client, which is neat. But not a general-purpose
server - which is a much harder problem.
A general-purpose server is a slab of code that feels totally
confident when faced with the problem of storing _all your
personal and/or corporate data_, across _arbitrary functional
upgrades_, for _all time forever_, while efficiently executing
and managing _any useful program or programs, transient or
persistent_. Yeah, that's a server OS.
So, conventionally, this industrial strength slab of code is
written with conventional OS techniques involving (a) bare metal
and (b) like, semaphores and shit. The kernel alone is like 12
million lines of code. Not that a browser is any much smaller.
And so, 20th-century network computing is the world's most
beautiful wire, between two dumpsters of shit spaghetti. Two
_completely different_ dumpsters. It turns out that with a big
enough dumpster of shit spaghetti, you can feed the world. And
why not two? Incompatibility creates jobs, you know.
Oh, and you can have a client without an identity. But you can't
have a _server_ without an identity. So Urbit has to solve _that_
problem. Unless it's just going to be a Web server. (Urbit is
actually a perfectly decent Web server.) Unless it has an actual
identity model, your general-purpose server - presumably a
_network_ server - has no network effect. No identity, no
network. No network, who the hell cares?
And unlike your ordinary, common or garden Web application
server, Urbit does need that network effect. You see, it's not
even our own work. It's something we found. On an unmarked USB
stick by the side of the road three kilometers from Area 51.
We think it's probably still human engineering. First of all,
there are no aliens. Second, Urbit uses Unicode. Do the aliens
have Unicode? Or SHA-256? _Where did Unicode come from,
anyway?_ And at the I/O level, we see UDP, HTTP, etc. The
command line does Emacs keys. At the very least, someone on
Earth (or at least _from_ Earth) has done some porting.
But other than these cosmetic details, there's not much sign of a
connection to ordinary Earth computing. For instance, Urbit
isn't written in any of our Earth languages. It is written in
something called Hoon, which is a strict, higher-order, typed
functional language - but has nothing in else in common with
other Earth languages, functional or not. Hoon does not even
use standard PL theory. And its syntax is just as alien, although
at least it confines itself to the ASCII plane. (And you
probably thought the "A" in "ASCII" stood for "American.")
Worse yet, Hoon is not written in anything normal. It's written
in Hoon. To be precise - the Hoon compiler compiles itself to a
much simpler automaton, Nock. Besides machine language itself,
and its various bytecode homages, there are three simple formal
models of computing - Turing machines, lambda calculus, and Chuck
Moore. There is also a fourth which no one has ever found useful
for anything: combinators. Nock is a combinator automaton.
While nowhere near the simplest such automaton known, and
certainly not of any _theoretical_ interest, Nock is so stupid
that if you gzip the spec, it's only 374 bytes. Nock's only
arithmetic operation is increment. So decrement is an `O(n)`,
operation; add is `O(m*n)`...
Clearly not a practical system. Even if this... _thing_... that
sits on top of it was in any way, shape or form remotely sane.
So why not try it? Heck, why not at least check it out? Strange
and foolish dreamers may hie themselves to teh github:
[https://github.com/urbit](https://github.com/urbit)
Various people have built and run Urbit on Ubuntu, Homebrew and
MacPorts. It's possible that all these people were stone cold
ninjas. Urbit is a pretty cool toy, I think, if you're a ninja.
Unfortunately it is not really ready for ordinary rice farmers.
If you can't resolve build dependencies by hand, we're sorry.
Urbit is probably not yet ready for you.
Where should you run Urbit? Ideally, in the cloud. Urbit can
punch a decent NAT hole. It doesn't like to, though - what does?
Bear in mind that your Urbit instance is a single-level store -
your state is saved as a log and a checkpoint (as in Redis -
except that Redis is both fast and reliable). This will work
much better on server hardware. That said, there are plenty of
good reasons to keep your servers in the closet with the plants.
Next, you need a ticket. Or not. You at least need to decide
whether you want a ticket or not. Actually, the answer is
simple. You do want one. But you don't need one - not yet.
Because Urbit, the OS, never depends on Earth semantics, it needs
its own network protocol - Ames. Ames is a P2P protocol with its
own public-key infrastructure. (Ames is encrypted, but the
current cryptosuite, suite A, is worthless snakeoil. Don't trust
it with your Trader Joe receipts.) Ames runs over UDP, and pays
as little attention to IP routing as possible. Needless to say,
Urbit does not use the DNS at all.
To sling packets on Ames, you need an identity. Needless to say,
there are a lot of ways to do distributed cryptographic identity,
all of them bad.
The general reason all PKIs suck is called "Zooko's Triangle."
Your identities can be distributed, secure, or human-meaningful -
pick any two. There is no way to solve Zooko's Triangle. The
only way to attack it is to compromise on at least one vertex.
To see how Urbit works, let's start with a standard solution. An
Urbit identity is called a "ship." You can launch your own ship
by generating a 2048-bit RSA key and hashing it to a 128-bit
fingerprint, which is your identity. This trivial design is the
basis of all distributed, secure PKIs.
Unfortunately, an identity should be above all a _name_. A
128-bit fingerprint looks like this:
316.931.986.049.624.498.975.974.005.376.666.572.699
which isn't a name. For no better reason than the fact that,
unless you're an autistic savant, you are basically a monkey with
an overgrown monkey brain. A name is something that fits in a
register. Your monkey brain doesn't have 128-bit registers.
Suppose we could use 64-bit fingerprints? At first this seems
even less promising. First of all, your monkey brain doesn't
have 64-bit registers, either. Second, at 64 bits, collisions
are already a real problem.
But we can solve both these problems. Your monkey brain doesn't
have 64-bit registers. But anything that lets us do 64-bit
identities might stretch down to 32 bits. And at 64 or 32 bits,
we can't assign identities by random hash. So we'll have to find
another way of distributing them.
A 32-bit identity - or even a 16-bit identity - will still never
be human-meaningful. Perhaps we can make it human-memorable.
Meaningful addresses are a nice feature in a social network, but
memorable addresses are essential. And if we have memorable
addresses, perhaps we can build meaningful names on top.
The classic example of a memorable address is a street address.
Your street address identifies you precisely, using a name. You
have this great brain hardware for remembering names. But what
does the name of your street _mean_? Nothing at all, usually.
And even if it does mean something, by accident or design, that
meaning has nothing at all to do with you. (One of us grew up in
Columbia, Maryland, which has street names like "Greek Boy
Place.")
So all we need is a simple, tasteful, memorable way to remember
32 bits - and we're on our way to approximating the Triangle.
Decimal notation is the worst way of remembering a 32-bit number.
IP notation is a little better. Urbit has a typically crude
approach: we map every byte to a CVC phoneme, making names like:
~tasfyn-partyv
~sivbud-barnel
~tomsyt-balsen
These strings, while quite meaningless, are no less memorable
than real human names in many a language. Moreover, they form a
language of their own, and become more memorable as you use them.
And there are 4 billion of them, which (as we'll see) is almost
exactly the right number.
But how do we distribute them? One obvious solution is a proof
of work scheme, as in Bitcoin. Coordinating a global
proof-of-work scheme is quite nontrivial, however. Also, there
is a second reason to compromise 100% decentralization: packet
routing. It might be possible to use a blockchain as a global
routing table. It would take some thinking about.
Furthermore, there's a clue here that the Bitcoin approach just
isn't getting. The limited subspace of short names, within the
general space of 128-bit names, is essentially _real estate_.
There is absolutely no reason, moral or practical, to give this
real estate away for free to people whose only contribution is
generating CO2 on their GPUs. Mining is not in any way a
productive activity.
Rather, initially, this real estate belongs to Urbit itself. If
Urbit has value, its real estate has value. If Urbit has no
value, its so-called real estate is a bunch of worthless bits.
Therefore, any value in the real estate can, should, and will be
used to bootstrap the system from an economic perspective. Ie,
it belongs to and will be captured by Urbit's developers and/or
early adopters. If you find this morally wrong, sorry. You're
probably some kind of a communist.
But because Urbit is a free republican society - not (ahem) a
fascist corporate dictatorship like Google, Facebook or Twitter -
a crucial aspect of launching or transferring a ship is that the
decision is irreversible.
As the master of an Urbit ship, your informal title is
cryptographic and _allodial_ - no one, not the government and
certainly not us, can challenge it. Unless the attacker can
steal your secrets. In which case, of course, she might as well
be you. That's like Bitcoin too.
If Bitcoin is money, Urbit is land. (Floating land is still
land, if there's a limited amount of it.) You own both in the
same way, by proving you can keep a secret. A Bitcoin is not
useful for anything, except selling to a greater fool. (We're
just kidding - we're huge Bitcoin fans.) But an Urbit ship is
directly useful, so long as Urbit itself is useful.
You fill your Bitcoin wallet either by creating new coins, or
buying old ones from Satoshi and his cronies. You build your
Urbit fleet by buying ships from us and our cronies. (Don't ask
what we had to do to get them from the aliens. Those aliens are
into a lot of strange shit, man.) Ships are transferable, but
Urbit is not designed to be a digital currency. Transaction
overhead is artificially high. Again, as in real estate.
Urbit at present is empty and worthless. So 32-bit ships -
destroyers - are $0. Launch a 128-bit ship (a submarine) and
ask me, ~tasfyn-partyv, for one. We'll send you one, two, or a
dozen. You can be as anonymous as you want, if you're polite.
But, if the network lives, a destroyer price will develop. It
will be very low at first, but not zero. Urbit is designed to be
free as in speech. It's not designed to be free as in beer.
How, cryptographically, are cloud ships distributed? And how are
packets routed? The answer is the same - the prefix hierarchy.
In Urbit's naval terminology, ships above 64 bits are
"submarines." 64-bit ships are "yachts." 32-bit, "destroyers."
16-bit, "cruisers." 8-bit, "carriers." This also resembles a
feudal hierarchy, so it comes with a feudal terminology. There
are 256 imperial carriers, 65.280 royal cruisers, 4.294.901.760
rebel destroyers, uncounted scads of private yachts, and more or
less infinitely many rogue submarines.
Every ship but a submarine has a "will," or certificate chain - a
linked list of "deeds." The first deed in this list is signed by
the ship's hierarchical prefix, or "flagship." Mere submarine are
independent; carriers create cruisers; cruisers create
destroyers; destroyers create yachts.
A submarine is the fingerprint of its own public key; a carrier's
fingerprint is predefined in the kernel. Anyone can create any
number of 128-bit submarines, whose free and independent
society the 64-bit naval hierarchy cannot interfere with. And
of course, since Urbit is (a) in the public domain and (b) not
patented, anyone can fork Urbit and change the carrier
fingerprints. Anyone can also create his own independent and
incompatible DNS, but efforts in this direction have not been
crowned with great success. In general, the easier it is
technically to fork open-source code or an open standard, the
less likely a fork is to actually happen.
An independent ship is an independent reputation. Your flagship
hierarchy, though it created your ship, has no control over it -
so your reputations are and should be separate. But there are
not 2^64 independent reputations in Urbit, only 2^32. Cruisers
have no control over the destroyers they create, but yachts have
no independence from the destroyers that created them.
The reason for this is simple - a destroyer corresponds not to a
person, but to any institution with its own independent
reputation. Yachts are for users, bots, or other sub-identities
of this institution. Each destroyer has 2^32 of them, which is,
of course, a lot.
How does independence work in practice? By pinning/TOFU. For
any deed number, or "life," the first instance is accepted. Thus
when changing secrets, perhaps to transfer a ship, the donor
signs a new deed created by the recipient. Once any ship sees
this deed, it will never accept another signed by the old owner.
Thus, a cruiser cannot sell the same new destroyer twice.
Similarly, deed 7 of ~tasfyn-partyv signs deed 8; but no ship
which has a deed 8 for ~tasfyn-partyv will either accept deed 7,
or any other purported deed 8 which deed 7 later signs.
Preventing a "double spend" thus depends on propagating the
latest deed. For this purpose, the ocean is divided into two
kinds of ships: friends and non-friends of the ship being
transferred. The ship has a list of its cryptographic partners,
or "neighbors," for which it holds a symmetric key and a routing
(IP) address.
The new owner sends the new deed to all the neighbors, thus
locking the old owner out of them. Future new friends will get
the new owner's will the same way they get the new owner's IP
address - by a lookup through the flagship hierarchy. Thus if we
update both neighbors and flagship, the old owner is locked out
and the new owner is locked in.
Technically, this is very much an imperfect procedure. It relies
on social trust to make it effective. For example, a malicious
seller could edit his neighbor list before delivering the ship.
You probably don't want to buy a used destroyer from someone you
distrust. Of course, the same is true of cars.
And more broadly, the naval hierarchy can and should provide
general administrative support. For one thing, the big ships
route your packets, at least when establishing contact with your
fellow destroyers.
So - do you want an Urbit destroyer? You know you do. Moreover,
they're free. Of course, if you are satisfied with a name that
looks like
~machec-binnev-dordeb-sogduc--dosmul-sarrum-faplec-nidted
you can keep swimming around Urbit in your submarine.
For a while, anyway. Because, besides memorability, there is
another reason for short names.
What's neat about short names is that there's a finite number of
them. This is not a bug, but a feature. Essentially, to borrow
the thinking of political scientist James Scott, a finite space
is _governable_. An infinite space is ungovernable.
If there are an infinite number of identities, there is no way
for anyone to distinguish between a new user and a banned user.
A reputation can be punished by destroying it, but anyone can
start again at zero. A parasite whose only reason to use the
network is to abuse it can keep coming back for more. An email
spammer will never run out of addresses to spam from.
IPv4 is a limited space, which almost but doesn't cure spam. The
problem is that IPv4 addresses are neither personal nor property,
so there is generally no easy way to punish a spammer as he
deserves through IP blacklisting. He is very unlikely to be in
any sense the owner of the IP address on his packets.
But if the email address and the IP address were the same thing,
and the present fuzzy economic relationship between the user of
an IP address were clear and simple, killing spam would become
easy. You spam from a destroyer; you go on a list of spammers;
no one will accept your unsolicited messages, ever.
You can get around this. You can buy a new destroyer. But the
thing is - it costs you *money*. You're not spamming for the
fun of it. If a destroyer costs a mere $1, the spam you send
from it needs to earn you $1.
This does not make it trivial for the forces of light to hunt you
down and render you into processed meat clippings. But it sure
as heck evens the game. Who will win? I guess we'll see.
So do you want an Urbit destroyer? Read the [documentation](/2013/11/18/urbit-is-easy-ch1.html) for instructions. Come on, they're free...

View File

@ -1,10 +1,4 @@
---
layout: tutpage
axis: doc-arvo
categories: tut
sort: 1
title: I - Basic Arvo
---
#Basic Arvo
These sections assume you've gotten Arvo up and running; if
not, [do so](/setup) first.

View File

@ -1,11 +1,6 @@
---
layout: tutpage
axis: doc-arvo
categories: tut
sort: 1
title: II - More Basic Arvo
---
#Local revision control
#More Basic Arvo
##Local revision control
Now you're ready to see the full power of this fully armed
and operational revision-controlled filesystem.
@ -146,7 +141,7 @@ But one could argue that it's just a party trick. But once your
revision control system and your scheduler are jammed into one
phone booth... why not jam networking in there too?
#Network revision control#
##Network revision control#
Arvo is the OS. Urbit is the network. In theory you could write
an Urbit client that wasn't Arvo, though it's hard to see why.

View File

@ -1,10 +1,4 @@
---
layout: tutpage
axis: doc-hoon
categories: tut
sort: 1
title: I - Intro To Hoon
---
#Intro to Hoon
> Like all men in Babylon, I have been proconsul; like all, a slave.
> - The Lottery in Babylon

View File

@ -1,10 +1,4 @@
---
layout: tutpage
axis: doc-hoon
categories: tut
sort: 2
title: II - Moar Hoon Types
---
#Types
> What good is a phone call if you're unable to speak?
> - The Matrix

View File

@ -1,10 +1,4 @@
---
layout: tutpage
axis: doc-hoon
categories: tut
sort: 3
title: III - Hoon Computes
---
#Hoon Computes
> I've only been in love with a beer bottle and a mirror.
> - Sid Vicious

View File

@ -1,10 +1,4 @@
---
layout: tutpage
axis: doc-hoon
categories: tut
sort: 4
title: IV - Gates
---
#Gates
> Anyone who thinks he's original is merely ignorant.
> - Nicolás Gómez Dávila

View File

@ -1,10 +1,4 @@
---
layout: tutpage
axis: doc-hoon
categories: tut
sort: 5
title: V - Tiles
---
#Tiles
> Not to get knowledge, but to save yourself from having
> ignorance foisted upon you.

View File

@ -1,10 +1,4 @@
---
layout: tutpage
axis: doc-hoon
categories: tut
sort: 6
title: VI - Type Inference
---
#Type Inference
> Ever, as before, does Madness remain a mysterious-terrific,
> altogether infernal boiling-up of the Nether Chaotic Deep,
@ -961,4 +955,4 @@ perfectly capable of inferring that when you weld `(list a)` and
change might confuse.
In short: generic polymorphism is cool but wacky. Leave it to
the experts, please!
the experts, please!

View File

@ -1,10 +1,5 @@
---
layout: tutpage
axis: doc-hoon
categories: tut
sort: 7
title: VII - Odds, Ends, Quirks
---
#Odds, Ends, Quirks
##A bestiary of cores##
@ -1214,4 +1209,4 @@ In freehand mode (F-Hoon), do whatever the heck you want. Note
that while uppercase is not permitted in a symbol, `-` is,
suggesting a generally Lisp-like state of gross hyphenated
disorder. F-mode is best used for top-layer software which
nothing else is based on; prototyping and casual coding; etc.
nothing else is based on; prototyping and casual coding; etc.

View File

@ -1,10 +1,4 @@
---
layout: tutpage
axis: doc-nock
categories: tut
sort: 1
title: I - Intro To Nock
---
#Intro to Nock
> What one fool can do, another can.
> - Ancient Simian proverb

View File

@ -1,10 +1,4 @@
---
layout: tutpage
axis: doc-nock
categories: tut
sort: 2
title: II - Nock Is Easy
---
#Nock is Easy
> You get used to it. I don't even see the code. All I see is blonde, brunette, redhead.
> - The Matrix

View File

@ -1,10 +1,5 @@
---
layout: tutpage
axis: doc-nock
categories: tut
sort: 3
title: III - Using Nock
---
#Using Nock
> But are you crazy enough?
> - Point Break

View File

@ -1,15 +0,0 @@
<div class="footer">
<div class="container">
<ul class="sidebar-nav">
<li class="sidebar-nav-item">
<a href="mailto:urbit@urbit.org">urbit@urbit.org</a>
</li>
<li class="sidebar-nav-item">
<a href="/community/articles/martian-computing/">544 Kelvin</a>
</li>
<li class="sidebar-nav-item">
<a href="/community/articles/continuity/">Continuity breach: ~2014.5.30</a>
</li>
</ul>
</div>
</div>

View File

@ -1,39 +0,0 @@
<head>
<link href="http://gmpg.org/xfn/11" rel="profile">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<!-- Enable responsiveness on mobile devices-->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<title>
{% if page.title == "Home" %}
{{ site.title }} &middot; {{ site.tagline }}
{% else %}
{{ page.title }} &middot; {{ site.title }}
{% endif %}
</title>
<!-- CSS -->
<link rel="stylesheet" href="/public/css/poole.css">
<link rel="stylesheet" href="/public/css/syntax.css">
<link rel="stylesheet" href="/public/css/main.css">
<!-- JS -->
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" src="/public/js/main.js"></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-47054188-1', 'urbit.org');
ga('send', 'pageview');
</script>
<!-- Icons -->
<link rel="shortcut icon" href="/favicon.png">
<!-- RSS -->
<link rel="alternate" type="application/rss+xml" title="RSS" href="/atom.xml">
</head>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -1,21 +0,0 @@
<div class="sidebar">
<div class="container sidebar-sticky">
<div class="sidebar-about">
<a href="/">
<h1 class="logo"><img src="/gen/main/pub/src/site/res/logo.png" class="logo"/></h1>
<h1 class="title">Urbit: a personal cloud computer</h1>
</a>
</div>
<ul class="sidebar-nav">
<li class="sidebar-nav-item">
<a href="/gen/main/pub/fab/site/documentation/" class="">Documentation</a>
</li>
<li class="sidebar-nav-item">
<a href="/community/" class="">Community</a>
</li>
<li class="sidebar-nav-item">
<a href="/setup/" class="">Setup</a>
</li>
</ul>
</div>
</div>

View File

@ -1,596 +0,0 @@
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html,
body {
margin: 0;
padding: 0;
}
html {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 1.5;
}
@media (min-width: 38rem) {
html {
font-size: 16px;
}
}
body {
color: #515151;
background-color: #fff;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
/* No `:visited` state is required by default (browsers will use `a`) */
a {
line-height: 1.1rem;
color: #555;
text-decoration: none;
}
li a, p a {
display: inline-block;
border-bottom: 2px solid #ccc;
}
/* `:focus` is linked to `:hover` for basic accessibility */
a:hover,
a:focus {
text-decoration: underline;
}
li a:hover, p a:hover,
li a:hover, p a:focus {
border-bottom: 2px solid #555;
}
/* Headings */
h1, h2, h3, h4, h5, h6 {
margin-bottom: .5rem;
font-weight: bold;
line-height: 1.25;
color: #313131;
text-rendering: optimizeLegibility;
}
h1 {
font-size: 1.2rem;
}
h2 {
margin-top: 1rem;
font-size: 1rem;
}
h3 {
margin-top: 1.5rem;
font-size: .9rem;
}
h4, h5, h6 {
margin-top: .9rem;
font-size: .9rem;
font-weight: 500;
letter-spacing: .03rem;
}
/* Body text */
p {
max-width: 42rem;
margin-top: 0;
margin-bottom: 1rem;
}
strong {
color: #303030;
}
/* Lists */
ul, ol, dl {
margin-top: 0;
margin-bottom: 1rem;
}
dt {
font-weight: bold;
}
dd {
margin-bottom: .5rem;
}
/* Misc */
hr {
position: relative;
margin: 1.5rem 0;
border: 0;
border-top: 1px solid #eee;
border-bottom: 1px solid #fff;
}
abbr {
font-size: 85%;
font-weight: bold;
color: #555;
text-transform: uppercase;
}
abbr[title] {
cursor: help;
border-bottom: 1px dotted #e5e5e5;
}
/* Code */
code,
pre, .codeblock {
font-family: Menlo, Monaco, "Courier New", monospace;
}
code {
padding: .25em .5em;
font-size: 90%;
background-color: #f9f9f9;
border-radius: none;
}
pre, .codeblock {
display: block;
margin-top: 0;
margin-bottom: 1rem;
padding: 1rem;
font-size: .9rem;
line-height: 1.4;
white-space: pre;
white-space: pre-wrap;
word-break: break-all;
word-wrap: break-word;
width: 42rem;
background-color: #f9f9f9;
}
pre code, .codeblock code {
padding: 0;
font-size: 90%;
color: inherit;
background-color: transparent;
}
.highlight {
margin-bottom: 1rem;
border-radius: none;
}
.highlight pre {
margin-bottom: 0;
}
/* Quotes */
blockquote {
padding: .5rem 1rem;
padding-left: 0;
max-width: 32rem;
margin: .8rem 0;
color: #7a7a7a;
}
blockquote p:last-child {
margin-bottom: 0;
}
@media (min-width: 30rem) {
blockquote {
padding-right: 5rem;
padding-left: 0;
}
}
img {
display: block;
margin: 0 0 1rem;
border-radius: none;
min-width:100%;
max-width:100%;
height:auto;
}
/* Tables */
table {
margin-bottom: 1rem;
width: 100%;
border: 1px solid #e5e5e5;
border-collapse: collapse;
}
td,
th {
padding: .25rem .5rem;
border: 1px solid #e5e5e5;
}
tbody tr:nth-child(odd) td,
tbody tr:nth-child(odd) th {
background-color: #f9f9f9;
}
/*
* Custom type
*
* Extend paragraphs with `.lead` for larger introductory text.
*/
.lead {
font-size: 1.25rem;
font-weight: 300;
}
/*
* Messages
*
* Show alert messages to users. You may add it to single elements like a `<p>`,
* or to a parent if there are multiple elements to show.
*/
.message {
margin-bottom: 1rem;
padding: 1rem;
color: #717171;
background-color: #f9f9f9;
}
/*
* Container
*
* Center the page content.
*/
.container {
max-width: 42rem;
padding-left: 1rem;
padding-right: 1rem;
margin-left: auto;
margin-right: auto;
}
/*
* Masthead
*
* Super small header above the content for site name and short description.
*/
.masthead {
padding-top: 1rem;
padding-bottom: 1rem;
margin-bottom: 3rem;
}
.masthead-title {
margin-top: 0;
margin-bottom: 0;
color: #505050;
}
.masthead-title a {
color: #505050;
}
.masthead-title small {
font-size: 75%;
font-weight: 400;
color: #c0c0c0;
letter-spacing: 0;
}
/*
* Posts and pages
*
* Each post is wrapped in `.post` and is used on default and post layouts. Each
* page is wrapped in `.page` and is only used on the page layout.
*/
.page,
.subpage,
.post {
margin-top: 2rem;
margin-bottom: 4em;
}
/* Blog post or page title */
.page-title,
.post-title,
.post-title a {
color: #303030;
}
/* Meta data line below post title */
.post-date {
display: block;
margin-top: -.5rem;
margin-bottom: 1rem;
color: #9a9a9a;
}
/* Related posts */
.related {
padding-top: 2rem;
padding-bottom: 2rem;
border-top: 1px solid #eee;
}
.related-posts {
padding-left: 0;
list-style: none;
}
.related-posts h3 {
margin-top: 0;
}
.related-posts li small {
font-size: 75%;
color: #999;
}
.related-posts li a:hover {
color: #268bd2;
text-decoration: none;
}
.related-posts li a:hover small {
color: inherit;
}
/*
* Pagination
*
* Super lightweight (HTML-wise) blog pagination. `span`s are provide for when
* there are no more previous or next posts to show.
*/
.pagination {
overflow: hidden; /* clearfix */
margin-left: -1rem;
margin-right: -1rem;
font-family: "PT Sans", Helvetica, Arial, sans-serif;
color: #ccc;
text-align: center;
}
/* Pagination items can be `span`s or `a`s */
.pagination-item {
display: block;
padding: 1rem;
border: 1px solid #eee;
}
.pagination-item:first-child {
margin-bottom: -1px;
}
/* Only provide a hover state for linked pagination items */
a.pagination-item:hover {
background-color: #f5f5f5;
}
@media (min-width: 30rem) {
.pagination {
margin: 3rem 0;
}
.pagination-item {
float: left;
width: 50%;
}
.pagination-item:first-child {
margin-bottom: 0;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
}
.pagination-item:last-child {
margin-left: -1px;
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
}
}
.hll { background-color: #ffffcc }
.css .o,
.css .o + .nt,
.css .nt + .nt { color: #999; }
.toggle {
display: none;
}
.subnav li.active .toggle, .toggle.active {
display: block;
}
.setup .subnav li.active > a {
border-color: #000;
font-weight: bold;
color: #000;
}
.sidebar-about {
height: 3rem;
}
.sidebar-about h1 {
font-size: 1rem;
font-weight: 500;
display: inline-block
}
.sidebar-about > a:focus,
.sidebar-about > a:hover {
border: none;
text-decoration: none;
}
.sidebar-about h1.title {
border-bottom: 3px solid transparent;
}
.sidebar-about h1.logo {
margin-top: .6rem;
margin-right: .6rem;
margin-left: -2rem;
margin-bottom: 0;
height: 1rem;
float: left;
}
@media only screen and (max-width: 500px) {
.sidebar-about h1.logo {
margin-left: 0;
}
}
img.logo {
width: 1.2rem;
height: 1.2rem;
}
.sidebar-about p.lead {
font-size: .8rem;
font-weight: normal;
}
.sidebar-nav {
margin: 0;
padding: 0;
}
.sidebar-nav li > a {
border: none;
border-bottom: 3px solid #fff;
}
.sidebar-about h1.title:focus,
.sidebar-about h1.title:hover,
.sidebar-nav li > a.active,
.sidebar-nav li > a:focus,
.sidebar-nav li > a:hover {
text-decoration: none;
border-bottom: 3px solid #555;
}
.sidebar-about > a > img {
width: 30px;
}
.sidebar-nav-item {
display: inline-block;
min-width: 13rem;
font-size: 1rem;
}
.footer {
margin-bottom: 4rem;
}
.footer .sidebar-nav-item {
margin-top: 4rem;
}
ul,ol {
padding-left: 2rem;
}
ol {
list-style-type: upper-roman;
}
ul {
list-style-type: circle;
}
ul.chat {
list-style-type: none;
}
ul.chat li {
margin-bottom: 2rem;
}
.doc-hoon h1, .doc-hoon h2 {
margin-top: 3rem;
}
.documentation > ul {
list-style-type: none;
padding-left: 0;
float: left;
}
.documentation ul > li {
float: left;
width: 13rem;
}
code, .subnav > ul > li > ul {
font-family: "Menlo", "Courier New", courier, monospace;
color: inherit;
}
.subnav > ul > li > ul {
font-size: .9rem;
overflow: hidden;
height: 0;
margin-right: 2rem;
}
.subnav > ul > li.active > ul {
overflow: visible;
height: auto;
}
.subnav > ul > li .section {
display: inline-block;
}
.setup .subnav li > a.expand, .subnav > ul > li .expand {
font-size: .6rem;
border: 0;
}
.setup .subnav li > a.expand:before, .subnav > ul > li .expand:before {
content: "\25B6";
font-size: .6rem;
}
.setup .subnav li > a.expand:before {
margin-right: .6rem;
}
.setup .subnav li.active > a.expand:before, .subnav > ul > li.active .expand:before {
content: "\25BC";
font-size: .6rem;
}
.subnav, .subnav ul {
list-style-type: none;
padding: 0;
margin: 0 0 .6rem 0;
}
.subnav ul > li > ul > li {
margin-bottom: .3rem;
}
.subnav a.active {
font-size: 1rem;
font-weight: 700;
color: #333;
border-bottom: 2px solid #555;
}
.page.setup .subnav .toggle {
margin: 1rem 0 2rem 1.6rem;
}
@media only screen and (min-width: 54rem) {
.doc-hoon .subnav.arms a{
font-size: .8rem;
}
.doc-hoon .subnav.runes, .doc-hoon .subnav.arms {
position: fixed;
top: 8rem;
left: 50%;
margin-left: -30rem;
overflow-y: scroll;
}
.subnav > ul > li > ul {
margin-right: 0;
}
}