mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-12-15 10:02:47 +03:00
reworked the site
This commit is contained in:
parent
15b335d4c4
commit
be038f4c11
@ -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"}"))
|
||||
==
|
||||
==
|
||||
==
|
||||
==
|
||||
==
|
||||
==
|
||||
==
|
@ -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
|
||||
==
|
||||
==
|
||||
==
|
||||
|
@ -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
|
||||
==
|
||||
==
|
||||
|
@ -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
|
||||
==
|
||||
==
|
||||
|
@ -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
|
||||
==
|
||||
==
|
||||
|
@ -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
|
||||
==
|
||||
==
|
||||
|
@ -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
|
||||
==
|
||||
==
|
||||
|
@ -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
|
||||
==
|
||||
==
|
||||
|
@ -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
|
||||
==
|
||||
==
|
||||
|
@ -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
|
||||
==
|
||||
==
|
||||
|
@ -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
|
||||
==
|
||||
==
|
||||
|
@ -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
|
||||
==
|
||||
==
|
||||
|
@ -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
|
||||
==
|
||||
==
|
||||
|
@ -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
|
||||
==
|
||||
==
|
||||
|
@ -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
|
||||
==
|
||||
==
|
||||
|
@ -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
|
||||
==
|
||||
==
|
||||
|
@ -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
|
||||
==
|
||||
==
|
||||
|
@ -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
|
||||
==
|
||||
==
|
||||
|
@ -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
|
||||
==
|
||||
==
|
||||
|
@ -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
|
||||
==
|
||||
==
|
||||
|
@ -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
@ -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
|
||||
|
@ -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...
|
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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!
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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>
|
@ -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 }} · {{ site.tagline }}
|
||||
{% else %}
|
||||
{{ page.title }} · {{ 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 |
@ -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>
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user