mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-12-13 11:45:45 +03:00
Merge branch 'pending' of https://github.com/galenwp/urbit
This commit is contained in:
commit
f941ed0c15
@ -1,10 +1,10 @@
|
||||
---
|
||||
title: Network Goals, Part I
|
||||
title: Network architecture: goals
|
||||
sort: 4
|
||||
hide: true
|
||||
---
|
||||
|
||||
# Constitution of a digital republic: part 1, goals
|
||||
# Design of a digital republic: part 1, goals
|
||||
|
||||
Some of us remember when the Internet was a social network.
|
||||
Today, the Internet is a modem.
|
||||
@ -13,7 +13,7 @@ It's a wonderful modem. It connects you to all kinds of great
|
||||
online services. Some of which are social "networks," but only
|
||||
networks in the MBA sense. Really they're social *servers*:
|
||||
giant virtual mainframes running one hardcoded program. 1976
|
||||
called -- it wants its acoustic coupler back.
|
||||
called — it wants its acoustic coupler back.
|
||||
|
||||
So, you prefer 1996. So, you wish you had your decentralized
|
||||
Internet back. So, you don't seem alone in this. So, we know
|
||||
@ -34,8 +34,8 @@ against "Governments of the Industrial World, you weary giants of
|
||||
flesh and steel."
|
||||
|
||||
Well... hindsight is 20/20. But in hindsight, even in 1996
|
||||
things were starting to head south. Usenet -- the brain of the
|
||||
Internet, when the Internet had a brain -- was already
|
||||
things were starting to head south. Usenet — the brain of the
|
||||
Internet, when the Internet had a brain — was already
|
||||
disintegrating under the barbarian invasions. And where is the
|
||||
WELL these days? (John Perry Barlow is probably still on it.)
|
||||
|
||||
@ -79,7 +79,7 @@ Dealing is way better than worrying. 1996 worried about the
|
||||
problem; 2016 ought to deal with it.
|
||||
|
||||
A constitution is not a declaration. It's not a list of ideals.
|
||||
It's more like a bridge -- an actual structure, that fails unless
|
||||
It's more like a bridge — an actual structure, that fails unless
|
||||
it stands up to genuine load. A bridge isn't a bridge unless it
|
||||
works. If you want a bridge, you have to build a bridge. It
|
||||
doesn't typically happen that you set out to build something
|
||||
@ -94,7 +94,7 @@ network. They weren't trying to, and they didn't.
|
||||
If we want a decentralized social network, we can't do it without
|
||||
rigorous engineering work. And we can't limit our work to the
|
||||
world of code. A decentralized network has to work not just
|
||||
technically -- but politically, economically, and socially.
|
||||
technically — but politically, economically, and socially.
|
||||
|
||||
Where do we go from here? How do we get back to 1996? Admit
|
||||
we've failed, and try again. How else?
|
||||
@ -289,7 +289,7 @@ republic, but it certainly works and it's better than nothing.
|
||||
Thus what seems like an optimal political design: the ugly,
|
||||
centralized, young larva that's designed to molt into a
|
||||
beautiful, mature, decentralized butterfly. And once mature, the
|
||||
larva must molt or die -- not keep growing into a gigantic,
|
||||
larva must molt or die — not keep growing into a gigantic,
|
||||
man-eating caterpillar of death.
|
||||
|
||||
## Economic engineering
|
||||
@ -374,8 +374,8 @@ space by giving blocks away. You may even increase the value of
|
||||
your own position.
|
||||
|
||||
A monopolized network is not politically healthy. So its
|
||||
economic value is lower. So -- if the network is properly
|
||||
designed and structured -- it can be stably demonopolized. The
|
||||
economic value is lower. So — if the network is properly
|
||||
designed and structured — it can be stably demonopolized. The
|
||||
monopoly power achieved by combining large positions is smaller
|
||||
than the reputation cost of remonopolization, so centrifugal
|
||||
force dominates and the system stays decentralized.
|
||||
@ -562,4 +562,5 @@ Goals are more interesting than ideals, don't you think?
|
||||
Goals and features are also different things. What are the
|
||||
features of a network that attempts to achieve these design
|
||||
goals? In the next installment, we'll look at how our own
|
||||
network -- Urbit -- measures up to these yardsticks.
|
||||
network — [Urbit](http://urbit.org) — measures up to these
|
||||
yardsticks.
|
@ -3,6 +3,7 @@ logo: black
|
||||
title: User doc
|
||||
sort: 1
|
||||
---
|
||||
|
||||
<div class="short">
|
||||
|
||||
# User documentation
|
||||
|
@ -1,46 +1,46 @@
|
||||
.bar
|
||||
margin-top 2rem
|
||||
margin-bottom 2rem
|
||||
& > div
|
||||
display inline-block
|
||||
a.logo
|
||||
display inline-block
|
||||
height 2rem
|
||||
vertical-align middle
|
||||
border none
|
||||
img.logo
|
||||
margin-right 18px
|
||||
margin-top 0
|
||||
ul
|
||||
margin 0
|
||||
line-height 2rem
|
||||
display inline-block
|
||||
li::before
|
||||
content ''
|
||||
padding-right none
|
||||
li
|
||||
display inline-block
|
||||
margin-bottom 0
|
||||
margin-right 1rem
|
||||
vertical-align middle
|
||||
li a
|
||||
border-bottom none
|
||||
text-decoration underline
|
||||
li a h1
|
||||
margin 0
|
||||
line-height inherit
|
||||
text-transform capitalize
|
||||
font-size 1.2rem
|
||||
h1
|
||||
text-transform capitalize
|
||||
font-size 1rem
|
||||
font-weight 400
|
||||
letter-spacing .03rem
|
||||
|
||||
.lead
|
||||
#body
|
||||
margin-top 3rem
|
||||
margin-top 0
|
||||
|
||||
.bar
|
||||
margin-top 2rem
|
||||
margin-bottom 2rem
|
||||
& > div
|
||||
display inline-block
|
||||
a.logo
|
||||
display inline-block
|
||||
height 2rem
|
||||
vertical-align middle
|
||||
border none
|
||||
img.logo
|
||||
margin-right 18px
|
||||
margin-top 0
|
||||
ul
|
||||
margin 0
|
||||
line-height 2rem
|
||||
display inline-block
|
||||
li::before
|
||||
content ''
|
||||
padding-right none
|
||||
li
|
||||
display inline-block
|
||||
margin-bottom 0
|
||||
margin-right 1rem
|
||||
vertical-align middle
|
||||
li a
|
||||
border-bottom none
|
||||
text-decoration underline
|
||||
li a h1
|
||||
margin 0
|
||||
line-height inherit
|
||||
text-transform capitalize
|
||||
font-size 1.2rem
|
||||
h1
|
||||
text-transform capitalize
|
||||
font-size 1rem
|
||||
font-weight 400
|
||||
letter-spacing .03rem
|
||||
margin-top 0
|
||||
|
||||
h1
|
||||
margin-top 1rem
|
||||
|
@ -251,12 +251,6 @@ li:before {
|
||||
transition: opacity 1s ease-in-out;
|
||||
z-index: 4;
|
||||
}
|
||||
img.logo.black {
|
||||
content: url("https://storage.googleapis.com/urbit-extra/logo/logo-black-100x100.png");
|
||||
}
|
||||
img.logo.white {
|
||||
content: url("https://storage.googleapis.com/urbit-extra/logo/logo-white-100x100.png");
|
||||
}
|
||||
img.logo {
|
||||
height: 2rem;
|
||||
width: 2rem;
|
||||
@ -545,58 +539,58 @@ div.post p.ib {
|
||||
font-weight: 200;
|
||||
}
|
||||
}
|
||||
.lead #body {
|
||||
margin-top: 3rem;
|
||||
margin-top: 0;
|
||||
}
|
||||
.lead .bar {
|
||||
.bar {
|
||||
margin-top: 2rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.lead .bar > div {
|
||||
.bar > div {
|
||||
display: inline-block;
|
||||
}
|
||||
.lead .bar a.logo {
|
||||
.bar a.logo {
|
||||
display: inline-block;
|
||||
height: 2rem;
|
||||
vertical-align: middle;
|
||||
border: none;
|
||||
}
|
||||
.lead .bar img.logo {
|
||||
.bar img.logo {
|
||||
margin-right: 18px;
|
||||
margin-top: 0;
|
||||
}
|
||||
.lead .bar ul {
|
||||
.bar ul {
|
||||
margin: 0;
|
||||
line-height: 2rem;
|
||||
display: inline-block;
|
||||
}
|
||||
.lead .bar ul li::before {
|
||||
.bar ul li::before {
|
||||
content: '';
|
||||
padding-right: none;
|
||||
}
|
||||
.lead .bar ul li {
|
||||
.bar ul li {
|
||||
display: inline-block;
|
||||
margin-bottom: 0;
|
||||
margin-right: 1rem;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.lead .bar ul li a {
|
||||
.bar ul li a {
|
||||
border-bottom: none;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.lead .bar ul li a h1 {
|
||||
.bar ul li a h1 {
|
||||
margin: 0;
|
||||
line-height: inherit;
|
||||
text-transform: capitalize;
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
.lead .bar ul h1 {
|
||||
.bar ul h1 {
|
||||
text-transform: capitalize;
|
||||
font-size: 1rem;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0.03rem;
|
||||
}
|
||||
.lead #body {
|
||||
margin-top: 3rem;
|
||||
margin-top: 0;
|
||||
}
|
||||
.lead h1 {
|
||||
margin-top: 1rem;
|
||||
vertical-align: middle;
|
||||
|
@ -113,6 +113,7 @@ module.exports = query {
|
||||
|
||||
setTitle: ->
|
||||
title = $('#cont h1').first().text() || @props.name
|
||||
title = @props.meta.title if @props.meta?.title
|
||||
document.title = "#{title} - #{@props.path}"
|
||||
|
||||
setPath: (href,hist) ->
|
||||
|
@ -1,17 +1,17 @@
|
||||
clas = require 'classnames'
|
||||
|
||||
logo = require './Logo.coffee'
|
||||
query = require './Async.coffee'
|
||||
reactify = require './Reactify.coffee'
|
||||
|
||||
recl = React.createClass
|
||||
{div,p,img,a} = React.DOM
|
||||
|
||||
Logo = React.createFactory recl render: ->
|
||||
{color} = @props
|
||||
if color is "white" or color is "black" # else?
|
||||
src = "//storage.googleapis.com/urbit-extra/logo/logo-#{color}-100x100.png"
|
||||
(img {src,className:"logo"})
|
||||
Logo = React.createFactory recl
|
||||
render: ->
|
||||
{color} = @props
|
||||
if color is "white" or color is "black" # else?
|
||||
src = "//storage.googleapis.com/urbit-extra/logo/logo-#{color}-100x100.png"
|
||||
(a {href:"http://urbit.org",style:{border:"none"}}, [(img {src,className:"logo"})])
|
||||
|
||||
Next = React.createFactory query {
|
||||
path:'t'
|
||||
|
@ -35,8 +35,7 @@ module.exports = {
|
||||
};
|
||||
|
||||
|
||||
|
||||
},{"../dispatcher/Dispatcher.coffee":15,"../persistence/TreePersistence.coffee":21}],2:[function(require,module,exports){
|
||||
},{"../dispatcher/Dispatcher.coffee":14,"../persistence/TreePersistence.coffee":20}],2:[function(require,module,exports){
|
||||
var BodyComponent, CLICK, Links, TreeActions, TreeStore, a, clas, div, query, reactify, recl, ref;
|
||||
|
||||
clas = require('classnames');
|
||||
@ -243,8 +242,11 @@ module.exports = query({
|
||||
});
|
||||
},
|
||||
setTitle: function() {
|
||||
var title;
|
||||
var ref1, title;
|
||||
title = $('#cont h1').first().text() || this.props.name;
|
||||
if ((ref1 = this.props.meta) != null ? ref1.title : void 0) {
|
||||
title = this.props.meta.title;
|
||||
}
|
||||
return document.title = title + " - " + this.props.path;
|
||||
},
|
||||
setPath: function(href, hist) {
|
||||
@ -312,8 +314,7 @@ module.exports = query({
|
||||
}), div);
|
||||
|
||||
|
||||
|
||||
},{"../actions/TreeActions.coffee":1,"../stores/TreeStore.coffee":22,"./Async.coffee":3,"./BodyComponent.coffee":4,"./Reactify.coffee":12,"classnames":17}],3:[function(require,module,exports){
|
||||
},{"../actions/TreeActions.coffee":1,"../stores/TreeStore.coffee":21,"./Async.coffee":3,"./BodyComponent.coffee":4,"./Reactify.coffee":11,"classnames":16}],3:[function(require,module,exports){
|
||||
var TreeActions, TreeStore, _load, code, div, recl, ref, span;
|
||||
|
||||
_load = require('./LoadComponent.coffee');
|
||||
@ -423,14 +424,11 @@ module.exports = function(queries, Child, load) {
|
||||
};
|
||||
|
||||
|
||||
|
||||
},{"../actions/TreeActions.coffee":1,"../stores/TreeStore.coffee":22,"./LoadComponent.coffee":10}],4:[function(require,module,exports){
|
||||
var Logo, Next, a, clas, div, img, logo, p, query, reactify, recl, ref;
|
||||
},{"../actions/TreeActions.coffee":1,"../stores/TreeStore.coffee":21,"./LoadComponent.coffee":10}],4:[function(require,module,exports){
|
||||
var Logo, Next, a, clas, div, img, p, query, reactify, recl, ref;
|
||||
|
||||
clas = require('classnames');
|
||||
|
||||
logo = require('./Logo.coffee');
|
||||
|
||||
query = require('./Async.coffee');
|
||||
|
||||
reactify = require('./Reactify.coffee');
|
||||
@ -446,10 +444,17 @@ Logo = React.createFactory(recl({
|
||||
if (color === "white" || color === "black") {
|
||||
src = "//storage.googleapis.com/urbit-extra/logo/logo-" + color + "-100x100.png";
|
||||
}
|
||||
return img({
|
||||
src: src,
|
||||
className: "logo"
|
||||
});
|
||||
return a({
|
||||
href: "http://urbit.org",
|
||||
style: {
|
||||
border: "none"
|
||||
}
|
||||
}, [
|
||||
img({
|
||||
src: src,
|
||||
className: "logo"
|
||||
})
|
||||
]);
|
||||
}
|
||||
}));
|
||||
|
||||
@ -524,8 +529,7 @@ module.exports = query({
|
||||
}));
|
||||
|
||||
|
||||
|
||||
},{"./Async.coffee":3,"./Logo.coffee":11,"./Reactify.coffee":12,"classnames":17}],5:[function(require,module,exports){
|
||||
},{"./Async.coffee":3,"./Reactify.coffee":11,"classnames":16}],5:[function(require,module,exports){
|
||||
var div, recl, ref, textarea;
|
||||
|
||||
recl = React.createClass;
|
||||
@ -548,7 +552,6 @@ module.exports = recl({
|
||||
});
|
||||
|
||||
|
||||
|
||||
},{}],6:[function(require,module,exports){
|
||||
var div, recl;
|
||||
|
||||
@ -571,8 +574,7 @@ module.exports = {
|
||||
};
|
||||
|
||||
|
||||
|
||||
},{"./CodeMirror.coffee":5,"./EmailComponent.coffee":7,"./KidsComponent.coffee":8,"./ListComponent.coffee":9,"./SearchComponent.coffee":13,"./TocComponent.coffee":14}],7:[function(require,module,exports){
|
||||
},{"./CodeMirror.coffee":5,"./EmailComponent.coffee":7,"./KidsComponent.coffee":8,"./ListComponent.coffee":9,"./SearchComponent.coffee":12,"./TocComponent.coffee":13}],7:[function(require,module,exports){
|
||||
var button, div, input, p, reactify, recl, ref;
|
||||
|
||||
reactify = require('./Reactify.coffee');
|
||||
@ -652,8 +654,7 @@ module.exports = recl({
|
||||
});
|
||||
|
||||
|
||||
|
||||
},{"./Reactify.coffee":12}],8:[function(require,module,exports){
|
||||
},{"./Reactify.coffee":11}],8:[function(require,module,exports){
|
||||
var a, div, hr, li, query, reactify, recl, ref, ul;
|
||||
|
||||
reactify = require('./Reactify.coffee');
|
||||
@ -724,8 +725,7 @@ module.exports = query({
|
||||
}));
|
||||
|
||||
|
||||
|
||||
},{"./Async.coffee":3,"./Reactify.coffee":12}],9:[function(require,module,exports){
|
||||
},{"./Async.coffee":3,"./Reactify.coffee":11}],9:[function(require,module,exports){
|
||||
var a, clas, div, h1, li, query, reactify, recl, ref, ul;
|
||||
|
||||
clas = require('classnames');
|
||||
@ -872,8 +872,7 @@ module.exports = query({
|
||||
}));
|
||||
|
||||
|
||||
|
||||
},{"./Async.coffee":3,"./Reactify.coffee":12,"classnames":17}],10:[function(require,module,exports){
|
||||
},{"./Async.coffee":3,"./Reactify.coffee":11,"classnames":16}],10:[function(require,module,exports){
|
||||
var div, input, recl, ref, textarea;
|
||||
|
||||
recl = React.createClass;
|
||||
@ -913,13 +912,7 @@ module.exports = recl({
|
||||
});
|
||||
|
||||
|
||||
|
||||
},{}],11:[function(require,module,exports){
|
||||
|
||||
|
||||
|
||||
|
||||
},{}],12:[function(require,module,exports){
|
||||
var Virtual, div, load, reactify, recl, ref, rele, span, walk;
|
||||
|
||||
recl = React.createClass;
|
||||
@ -986,8 +979,7 @@ module.exports = _.extend(reactify, {
|
||||
});
|
||||
|
||||
|
||||
|
||||
},{"./LoadComponent.coffee":10}],13:[function(require,module,exports){
|
||||
},{"./LoadComponent.coffee":10}],12:[function(require,module,exports){
|
||||
var a, div, input, query, reactify, recl, ref,
|
||||
slice = [].slice;
|
||||
|
||||
@ -1125,8 +1117,7 @@ module.exports = query({
|
||||
}));
|
||||
|
||||
|
||||
|
||||
},{"./Async.coffee":3,"./Reactify.coffee":12}],14:[function(require,module,exports){
|
||||
},{"./Async.coffee":3,"./Reactify.coffee":11}],13:[function(require,module,exports){
|
||||
var div, query, reactify, recl,
|
||||
slice = [].slice;
|
||||
|
||||
@ -1254,8 +1245,7 @@ module.exports = query({
|
||||
}));
|
||||
|
||||
|
||||
|
||||
},{"./Async.coffee":3,"./Reactify.coffee":12}],15:[function(require,module,exports){
|
||||
},{"./Async.coffee":3,"./Reactify.coffee":11}],14:[function(require,module,exports){
|
||||
var Dispatcher;
|
||||
|
||||
Dispatcher = require('flux').Dispatcher;
|
||||
@ -1276,8 +1266,7 @@ module.exports = _.extend(new Dispatcher(), {
|
||||
});
|
||||
|
||||
|
||||
|
||||
},{"flux":18}],16:[function(require,module,exports){
|
||||
},{"flux":17}],15:[function(require,module,exports){
|
||||
var rend;
|
||||
|
||||
rend = React.render;
|
||||
@ -1450,8 +1439,7 @@ $(function() {
|
||||
});
|
||||
|
||||
|
||||
|
||||
},{"./actions/TreeActions.coffee":1,"./components/AnchorComponent.coffee":2,"./components/BodyComponent.coffee":4,"./components/Components.coffee":6,"./persistence/TreePersistence.coffee":21}],17:[function(require,module,exports){
|
||||
},{"./actions/TreeActions.coffee":1,"./components/AnchorComponent.coffee":2,"./components/BodyComponent.coffee":4,"./components/Components.coffee":6,"./persistence/TreePersistence.coffee":20}],16:[function(require,module,exports){
|
||||
/*!
|
||||
Copyright (c) 2015 Jed Watson.
|
||||
Licensed under the MIT License (MIT), see
|
||||
@ -1501,7 +1489,7 @@ $(function() {
|
||||
}
|
||||
}());
|
||||
|
||||
},{}],18:[function(require,module,exports){
|
||||
},{}],17:[function(require,module,exports){
|
||||
/**
|
||||
* Copyright (c) 2014-2015, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
@ -1513,7 +1501,7 @@ $(function() {
|
||||
|
||||
module.exports.Dispatcher = require('./lib/Dispatcher')
|
||||
|
||||
},{"./lib/Dispatcher":19}],19:[function(require,module,exports){
|
||||
},{"./lib/Dispatcher":18}],18:[function(require,module,exports){
|
||||
/*
|
||||
* Copyright (c) 2014, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
@ -1765,7 +1753,7 @@ var _prefix = 'ID_';
|
||||
|
||||
module.exports = Dispatcher;
|
||||
|
||||
},{"./invariant":20}],20:[function(require,module,exports){
|
||||
},{"./invariant":19}],19:[function(require,module,exports){
|
||||
/**
|
||||
* Copyright (c) 2014, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
@ -1820,7 +1808,7 @@ var invariant = function(condition, format, a, b, c, d, e, f) {
|
||||
|
||||
module.exports = invariant;
|
||||
|
||||
},{}],21:[function(require,module,exports){
|
||||
},{}],20:[function(require,module,exports){
|
||||
var dedup;
|
||||
|
||||
dedup = {};
|
||||
@ -1878,8 +1866,7 @@ module.exports = {
|
||||
};
|
||||
|
||||
|
||||
|
||||
},{}],22:[function(require,module,exports){
|
||||
},{}],21:[function(require,module,exports){
|
||||
var EventEmitter, MessageDispatcher, QUERIES, TreeStore, _curr, _data, _tree, clog;
|
||||
|
||||
EventEmitter = require('events').EventEmitter;
|
||||
@ -2104,8 +2091,7 @@ TreeStore.dispatchToken = MessageDispatcher.register(function(payload) {
|
||||
module.exports = TreeStore;
|
||||
|
||||
|
||||
|
||||
},{"../dispatcher/Dispatcher.coffee":15,"events":23}],23:[function(require,module,exports){
|
||||
},{"../dispatcher/Dispatcher.coffee":14,"events":22}],22:[function(require,module,exports){
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||
@ -2408,4 +2394,4 @@ function isUndefined(arg) {
|
||||
return arg === void 0;
|
||||
}
|
||||
|
||||
},{}]},{},[16]);
|
||||
},{}]},{},[15]);
|
||||
|
Loading…
Reference in New Issue
Block a user