on master help sign in
11 files changed+278−17
since splitsnapshots
unifiedsplit
content/blog/ares.md+51 content/events/2023-06-29-Urbit-Paris-Meetup-1.md+1−1 content/events/2023-07-01_urbit-meetup-mst.md+23 content/events/2023-07-20-Urbit-Paris-Meetup-ethcc.md+53 content/grants/2022/chess-bounty.md+2 content/grants/2023/elm.md+4−1 content/grants/2023/json-parser-suite.md+1−1 content/grants/2023/replit.md+2−2 content/grants/2023/splitwise-rfp.md+26 content/grants/2023/splitwise.md+113−9 content/grants/2023/uc-concierge.md+2−3
content/blog/ares.mdnew file+51
@@ -0,0 +1,51 @@
1++++
2+title = "Ares"
3+date = "2023-06-26"
4+description = "A light technical description of Ares, the new Urbit runtime"
5+
6+[extra]
7+author = "Noah Kumin"
8+ship = "~librex-dozryc"
9+image = "https://storage.googleapis.com/media.urbit.org/blog/ares-header.png"
10++++
11+
12+![Image](https://storage.googleapis.com/media.urbit.org/blog/ares-header.png)
13+
14+## What is Ares?
15+
16+Ares is a new Urbit runtime that will be much faster and manage a much larger amount of data than previous versions of the runtime. Those new to Urbit commonly ask if they will be able to host photos and videos on their Urbit ships. Ares—a joint project from the Urbit Foundation, Tlon, and Zorp—sets the stage for us to be able to answer, simply, “Yes.” Ares is still a work in progress, but we expect to see the new binaries rolled out later this year. There are three components to the project. Let’s talk about them one by one.
17+
18+## 1. Code Generation
19+
20+Modern CPUs are extraordinarily fast. But until now your Urbit hasn’t been able to take full advantage of this fact. One way to conceptualize the problem is to imagine a train that is only able to go as fast as a track-worker can lay down track for it. In this analogy, your CPU is the train, and the track-worker is the Urbit runtime. The aim is to have large sections of track laid down ahead of time. Ares includes a codegen system that compiles Nock, Urbit’s assembly language, to machine code that the CPU can predict well.
21+
22+This system addresses what has until now been a problem: Nock is meant to invoke other code in a given Urbit computer’s “subject.” Or, in more common parlance, in the computer’s “state.” Your state changes with every new message your Urbit computer sends and receives, or with any new event in any app. That makes it hard to make the resulting machine code run fast, since the CPU needs to read from the subject while it’s running in order to figure out what machine code will be run next.
23+
24+The new code generation process in Ares solves this problem by using a system which the developers have called “subject knowledge analysis.” What does this mean? By analyzing how an Urbit subject might change over the course of a Nock computation, Ares will learn about the subject's tree shape and about its data dependencies (*i.e.*, the way that later parts of the computation depend on earlier parts of the computation). This allows those parts of the subject which are known at the time of compiling Nock to machine code to remain known at later points in the computation.
25+
26+To go back to our metaphor of train tracks, this is what allows the “track” to be laid down ahead of time. This set of known parts of the subject typically includes Nock formulas stored in [cores](https://developers.urbit.org/guides/core/hoon-school/F-cores#cores). This allows the resulting machine code to use direct jumps to perform Nock function calls. Without this “subject knowledge analysis,” the CPU would have had to perform an “indirect jump” by calculating the location to which a later instruction would jump. Now your computer’s CPU can jump directly to where it’s supposed to go.
27+
28+## 2. 2stackz Noun Allocator
29+
30+Ares will make use of what we’re calling the *2stackz noun allocator*. With the advent of Ares, your Urbit will be a virtual machine with two stacks and no heap. What does this mean? Traditionally, a program has a *stack* and a *heap*. The stack is a linear data structure within a program used for the program’s execution. The heap is a less structured region of memory that is used for storing large pieces of data or data that you want to keep around for a while without taking up space in the stack. However, the heap is slower, because its system for allocating memory is less orderly. (Imagine, say, trying to find a specific pair of socks in a heap of clothing.)
31+
32+Ares recognizes that because Nock is much more constrained than most languages, the Urbit runtime doesn’t actually need a heap. Instead you can take the function call stack and split it in two. The top of either stack can then be used as a little temporary heap. Whenever a function executes, you copy the data that gets returned from one stack to the other. And all the intermediate products that get created when running that function (*i.e.*, other functions that got called by the initial function) sit there as *garbage* (unwanted or unused data) in between the two stacks. But you don’t have to do the same sort of bookkeeping—tracking and updating these values—that you would have to do with a heap.
33+
34+Every piece of data in your Urbit computer is a noun. A noun is an atom (a positive integer or zero) or a cell (a pair of nouns). Before Ares, both allocating and freeing a noun in the Urbit runtime were processes that took a lot of time. (To *allocate* a noun is to put that noun in memory and to *free* it is to tell your urbit that you don’t need it any more.) Ares should make both of these processes much faster. This is good news because the Urbit runtime allocates nouns (particularly pairs of nouns, known as cells) like nobody’s business.
35+
36+## 3. Persistent Memory Arena
37+
38+Ares’s Persistent Memory Arena is for managing large amounts of data within your urbit in such a way that your urbit does not get slow. If you have terabytes of data within your Urbit, you can only have a very small subset of that within your hardware’s RAM at a given time. The rest of that data is going to have to live on disk—the section of your hardware that is more capacious but takes more time to access.
39+
40+To deal with this fact, your motherboard moves data back and forth between RAM and disk depending on what data needs to be accessed at a given time. This is known as *paging*, because it does so one *page* (usually four kilobytes) at a time. Traditionally operating systems will handle paging for you, but they do it in a generic way. The Persistent Memory Arena is designed specifically for managing Urbit's single-level store.
41+
42+A *single-level store* means that there’s no distinction in the operating system between data that lives in RAM and data that lives on disk. Instead of having two levels from which you can access data, you only have one, and the system itself manages which parts of the data are in RAM and which are in disk. The Persistent Memory Arena is an optimization for handling a large amount of data in a single level store. It is for nouns that persist between computations. Using the PMA, your urbit’s state can grow large without being hemmed in by the limitations of your hardware’s RAM.
43+
44+
45+## Updates and Links
46+
47+You can find the Ares GitHub repository [here](https://github.com/urbit/ares). The technical proposal is [here](https://github.com/urbit/ares/blob/status/docs/proposal/proposal-nock-performance.md). Check back at the Urbit Google Groups [listserv](https://groups.google.com/a/urbit.org/g/dev/), the [@zodisok](https://twitter.com/zodisok) Twitter account, and the Urbit Foundation [group](https://tlon.network/lure/~halbex-palheb/uf-public) for updates about the upcoming release.
48+
49+–
50+
51+*Noah Kumin is the founder and editor in chief of the [Mars Review of Books](https://marsreview.org/).*
content/events/2023-06-29-Urbit-Paris-Meetup-1.md+1−1
@@ -3,7 +3,7 @@ title = "Urbit Meetup in Paris"
33starts = "2023-06-29T18:30:00"
44ends = "2023-06-29T21:30:00"
55timezone = "Europe/Amsterdam"
6−location = "Paris (TBA)"
6+location = "La Fièvre, 108 Rue Oberkampf, 75011 Paris"
77image = "https://storage.googleapis.com/media.urbit.org/site/events/urbitParis-meetup-1.png"
88registration_url = "https://www.meetup.com/urbit-paris/events/293962806/"
99description = "Urbit Paris - Meetup #1"
content/events/2023-07-01_urbit-meetup-mst.mdnew file+23
@@ -0,0 +1,23 @@
1++++
2+title = "Urbit Meetup - Utah MST"
3+starts = "2023-07-01T10:00:00"
4+ends = "2023-07-01T11:00:00"
5+timezone = "America/Phoenix"
6+location = "Maeser Park – 451 E 600 S, Provo, UT 84606"
7+image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbit-utah.png"
8+registration_url = "https://urbitmst.org/"
9+description = "Our third meetup in Utah"
10+dark = true
11+darken_image = "true"
12+
13+[[hosts]]
14+name = "Lyman"
15+patp = "~sonmeg-tomdex"
16+
17++++
18+
19+Are you looking for more than the options presented to you?
20+
21+Come to our Urbit (MST) meetup. All are welcome. Bring a computer and we can onboard you with a planet and hosting for free on site. Whether you are new to Urbit or fluent in Hoon, come and meet others in Utah interested in Urbit.
22+
23+This will be our first morning meetup, we will have donuts. Bring your friends. You are invited.
content/events/2023-07-20-Urbit-Paris-Meetup-ethcc.mdnew file+53
@@ -0,0 +1,53 @@
1++++
2+title = "𝓣𝓱𝓮 𝓢𝓾𝓶𝓶𝓮𝓻 𝓢𝓸𝓲𝓻𝓮𝓮 - Paris ETHCC"
3+starts = "2023-07-20T19:00:00"
4+ends = "2023-07-21T1:00:00"
5+timezone = "Europe/Amsterdam"
6+location = "Le Comptoir Général"
7+image = "https://storage.googleapis.com/media.urbit.org/site/events/parisian-tweet-v2.gif"
8+registration_url = "https://lu.ma/parissoiree"
9+description = "Urbit Summer Soiree Paris @ETHCC"
10+dark = true
11+darken_image = "false"
12+
13+[[hosts]]
14+name = "Thomas"
15+patp = "~dalweb-donfun"
16+
17+[[hosts]]
18+name = "Ted"
19+patp = "~rovnys-ricfer"
20+
21+[[hosts]]
22+name = "Sam"
23+patp = "~tidren-nosryg"
24+
25+[[hosts]]
26+name = "Shad (giga)"
27+
28+[[guests]]
29+name = "Illia (co-founder Near)"
30+
31++++
32+Presented by Urbit | giga | NEAR
33+​An evening of salacious chatter and good friends under the night sky and the peering eye of the tower.
34+
35+​Join us on July 20th with other like minds as we manifest the reality around us, drinking and eating till we can no more.
36+
37+​At 19:30 we will record a live episode of the [ZeroK podcast](https://www.youtube.com/@zero-k-podcast/videos) between [Ted Blackman](https://twitter.com/rovnys) (CTO Urbit Foundation) & [Illia Polosukhin](https://twitter.com/ilblackdragon) (CEO Near).
38+
39+​RSVP necessary.
40+
41+*​NB. Due to high demand, please [signup](https://lu.ma/parissoiree) early and consider coming before 19:45 to avoid any disappointment.*
42+
43+![Foto](https://storage.googleapis.com/media.urbit.org/site/events/luma-parisian-event.jpg)
44+
45+​“In the parties which she gave, since I could not imagine the guests as having any bodies, any moustaches, any boots, as making any utterances that were commonplace, or even original in a human and rational way, this whirlpool of names, introducing less material substance than would a phantom banquet or a spectral ball, round that statuette in Dresden china which was Madame de Guermantes, kept for her palace of glass the transparence of a showcase.
46+
47+​Then, after Saint-Loup had told me various anecdotes about his cousin’s chaplain, her gardener, and the rest, the Hôtel de Guermantes had become—as the Louvre might have been in days gone by—a kind of castle, surrounded, in the very heart of Paris, by its own domains, acquired by inheritance, by virtue of an ancient right that had quaintly survived, over which she still enjoyed feudal privileges.”
48+
49+[​Urbit](https://urbit.org/) is a new kind of computer that you can own completely in ways that matter: networking, identity, & data. It's a clean-slate operating system, p2p network and persistent identity.
50+
51+[​giga](https://gigaver.se/) is a hardcore marketing and ecosystem firm bringing projects and networks to the spotlight. Email us today to learn how we take projects from the deep dark depths and put them on a pedestal.
52+
53+[​NEAR](https://near.org/) allows you to effortlessly create and distribute innovative decentralized apps across any blockchain, while helping build a more open web, with the NEAR Blockchain Operating System (BOS).
content/grants/2022/chess-bounty.md+2
@@ -49,4 +49,6 @@ Never say never, but there is a strong preference for 3 novice developers to wor
4949# Milestones and Compensation
5050Each of the three Deliverables above is a milestone. However, since the reward is 3 stars and designed to be completed by a 3-person team, it seems likely that the compensation schedule would be "1 star per person upon full completion". Specific details will be agreed upon with the contributor team prior to starting work.
5151
52+**Bonus** 3 additional stars will be paid to the contributors (1 each) if work is completed before October 2023
53+
5254
content/grants/2023/elm.md+4−1
@@ -10,7 +10,7 @@ grant_category = ["Other"]
1010[extra]
1111image = ""
1212description = "Making Elm the frontend technology for Urbit"
13−reward = "5 Stars"
13+reward = "5 Stars + Bonus"
1414assignee = ["~racfer-hattes"]
1515champion = ["~rovnys-ricfer"]
1616grant_id = "P0275"
@@ -62,4 +62,7 @@ Reward: 1 star
6262
6363Deliverables: An Elm airlock library that supports Solid-state subscriptions.
6464
65+## Bonus
66+
67+Upon successful completion of project, the contributor will also receive a 6K USDC bonus funded by Vaporware
6568
content/grants/2023/json-parser-suite.md+1−1
@@ -14,7 +14,7 @@ reward = "2 Stars"
1414assignee = ["~litlep-nibbyt"]
1515champion = ["~lagrev-nocfep"]
1616grant_id = "P0245"
17−completed = false
17+completed = true
1818canceled = false
1919
2020+++
content/grants/2023/replit.md+2−2
@@ -13,10 +13,10 @@ description = "Produce a Replit-compatible binary and instance."
1313reward = "4 stars"
1414assignee = [""]
1515champion = ["~mastyr-bottec"]
16−grant_id = ""
16+grant_id = "B0282"
1717completed = false
1818canceled = false
19−work_request_link = ""
19+work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=B0282&prefill_Grant+Name=Replit%20%26%20Replit%20Integration%20for%20Site"
2020
2121+++
2222
content/grants/2023/splitwise-rfp.mdnew file+26
@@ -0,0 +1,26 @@
1++++
2+
3+title = "Expense Sharing App for Urbit"
4+date = "2023-04-03"
5+
6+[taxonomies]
7+grant_type = ["RFP"]
8+grant_category = ["App Dev"]
9+
10+[extra]
11+image = ""
12+description = "Create a crypto and fiat expense sharing app for Urbit "
13+reward = "1 Star"
14+assignee = ["~talfus-laddus"]
15+champion = [""]
16+grant_id = "P0279"
17+completed = true
18+canceled = false
19+
20++++
21+
22+The Urbit community hosts many IRL events and, inevitably, this means splitting tabs with other Urbiters. Urbit needs its own expense sharing app that seamlessly keeps track of all expenses and IOUs in one place and works with both crypto and fiat.
23+
24+The Urbit version can be loosely modeled on the expense sharing app [Splitwise](https://www.splitwise.com). Splitwise uses centralized cloud infrastructure, but an Urbit version could be architected so that accounts payable and receivable are kept on your ship. The Urbit version should also be mobile-first, so it's easy to use on the go.
25+
26+See the full proposal [here](https://urbit.org/grants/splitwise)
content/grants/2023/splitwise.md+113−9
@@ -1,25 +1,129 @@
11+++
22
3−title = "Expense Sharing App for Urbit"
4−date = "2023-04-03"
3+title = "Expense Sharing App"
4+date = "2023-06-22"
55
66[taxonomies]
7−grant_type = ["RFP"]
7+grant_type = ["Proposal"]
88grant_category = ["App Dev"]
99
1010[extra]
1111image = ""
12−description = "Create a crypto and fiat expense sharing app for Urbit "
13−reward = "TBD"
14−assignee = [""]
12+description = ""
13+reward = "1 Star"
14+assignee = ["~talfus-laddus"]
1515champion = [""]
16−grant_id = "P1001"
16+grant_id = "P0279"
1717completed = false
1818canceled = false
1919
2020+++
2121
22−The Urbit community hosts many IRL events and, inevitably, this means splitting tabs with other Urbiters. Urbit needs its own expense sharing app that seamlessly keeps track of all expenses and IOUs in one place and works with both crypto and fiat.
22+# Motivation
23+The Urbit community hosts many IRL events and, inevitably, this means splitting tabs with other Urbiters. Urbit needs its own expense sharing app that seamlessly keeps track of all expenses and IOUs in one place and works with both crypto and fiat [RFP](https://urbit.org/grants/splitwise-rfp).
2324
24−The Urbit version can be loosely modeled on the expense sharing app [Splitwise](https://www.splitwise.com). Splitwise uses centralized cloud infrastructure, but an Urbit version could be architected so that accounts payable and receivable are kept on your ship. The Urbit version should also be mobile-first, so it's easy to use on the go.
25+Urbit is for small communities. And those need a way to keep track of and to split shared expenses.
26+
27+# Basic User Story
28+A member of a group wants to keep track of all expenses in order to eventually settle debts with a minimal number of transactions.
29+
30+# Basic User Tasks
31+ - Create or select a group
32+ - Invite other people to the group
33+ - Add an expense involving other group members
34+ - View all expenses
35+ - Edit an expense
36+ - Delete an expense
37+ - Retrieve a suggestion on how to balance debts with minimal number of transactions
38+
39+# Basic User Flow
40+1. Select a group
41+2. Add an expense
42+3. Check balance
43+ - Who is owed, and who owes money to the group and how much?
44+4. Settle debts
45+ - The app suggests an efficient way to settle debts in the group
46+ - Mark outstanding expenses as paid
47+
48+# Architecture
49+The architecture will be loosely modeled on existing expense sharing apps such as [Splitwise](https://www.splitwise.com/) and [Tricount](https://www.tricount.com/en/).
50+
51+An expense can involve only a subset of all group members. It has the following attributes:
52+
53+- title (For what reasons?)
54+ - payer (Who paid?)
55+ - involves (For whom?)
56+ - date (When?)
57+ - amount (How much?)
58+ - currency
59+ - note
60+
61+All group members are ships (`@p`). A list of group members and all expenses of the group will be stored on the ship of the group initiator. Other group members will read and write from/to there.
62+
63+In order to find a minimum number of transaction to settle debts in the group ("simplified debts"), shared expenses will be modeled as a flow network. Money flows from the participants who owe money to the group (debitors) to the participants who are owed money by the group (creditors). Using [Edmonds–Karp algorithm](https://en.wikipedia.org/wiki/Edmonds%E2%80%93Karp_algorithm), the [maximum flow](https://en.wikipedia.org/wiki/Maximum_flow_problem) of this network will be computed. From the resulting residual network transactions to balance out shared expenses will be derived. A Python reference implementation can already be found [here](https://git.sr.ht/~talfus-laddus/splt-exps-py).
64+
65+*Note: The trivial case of settling debts among two person (group size of two) is of course supported.*
66+
67+# Backend
68+The backend will be a gall agent with a basic set of operations addressing the user's needs listed above. Alongside the gall agent, a couple of libraries will be created: A library implementing the Edmonds-Karp algorithm and a library handling currency exchange rates and conversions.
69+
70+# Frontend
71+[Keep it simple, stupid!](https://en.wikipedia.org/wiki/KISS_principle)
72+The frontend will be a mobile-first website.
73+
74+It is an open question whether the frontend will in the initial phase be served from Mars or Earth. The website should eventually be served from the ship.
75+
76+# Milestones
77+Documentation and tests throughout the code base will be present. The source code will be available in a public git repository and licensed under MIT.
78+
79+## Milestone 1 - Proof of Concept
80+Completion: Beginning of App School Live (August 2023)
81+
82+Payment: None
83+
84+Deliverables: Edmonds-Karp Library
85+
86+The Proof of Concept (POC) demonstrates how to model shared expenses as a flow network and how to derive from it the minimum number of transactions needed to settle debts. The POC implements the Edmonds-Karp algorithm as well as the logic of how to construct the flow network from a list of expenses and how to derive a list of transactions from the residual network.
87+
88+## Milestone 2 - Minimal Viable Product
89+Completion: End of App School Live before Assembly (October 2023)
90+
91+Payment: 1 Star
92+
93+Deliverables : Gall Agent: Website
94+
95+The Minimal Viable Product (MVP) consists of a gall agent as backend and a website as frontend.
96+
97+Iterations
98+1. Create a gall agent containing a basic set of operations to manage groups and to add, store, delete and retrieve group expenses.
99+2. Create a simple, stupid and mobile-first website as an interface to the gall agent.
100+3. Add a feature to “simplify debts” by integrating the Edmonds-Karp library into the gall agent. The agent can suggest a way to balance out shared expenses with a minimal number of transactions.
101+4. Synchronize expenses among the group members.
102+5. Handle different currencies. Retrieve the current exchange rate and do conversions between currencies.
103+6. Make the app available through Software Distribution.
104+
105+# Limitations
106+Since the list of expenses is stored on the group initiator's ship, when it is down other people can not synchronize their state of the application.
107+
108+# Additional Future Work
109+The future of the app could entail:
110+
111+ - A robust decentralization/synchronization mechanism which addresses the limitation raised above
112+ - A more polished interface
113+ - An integration into Groups
114+ - Apps for Android and iOS
115+ - A new feature to categorize expenses and derive statistics
116+ - Yet unforeseen improvements
117+
118+# About Me
119+I am in search of something worthwhile to contribute my time and effort to.
120+
121+My name is Matthias Schaub (`~talfus-laddus`). Even though I work part-time as a software developer for a non-profit corporation dedicated to better society and environment, I feel the need to spend my time on projects of which I am more confident that they provide sustained value to society (or at least have the potential to). That is why I am invested to contribute to the Urbit ecosystem by learning Hoon and how to build applications on Urbit. A more basic motivation is to have my flat mates on Urbit. Beside a chat, we need a way to handle shared expenses.
122+
123+I attended Hoon School and registered for App School. Alongside the App School curriculum, I want to foster my learning by building this application. On Earth side I have solid Python and basic HTML, CSS, and JavaScript skills. I am proficient in git, and I am used to working with a terminal on a Linux machine. In the past, I wanted to read the reference of a Hoon rune without leaving Vim. So I wrote a Python script to convert Hoon rune references from Markdown to Vimdoc. The result is a Vim helpfile in disguise of a plugin ([hoon-runes.vim](https://git.sr.ht/~talfus-laddus/hoon-runes.vim)). Shortly after, I did the same for the documentation of the Hoon standard library ([hoon-stdlib.vim](https://git.sr.ht/~talfus-laddus/hoon-stdlib.vim)).
124+
125+In order to find out more about my previous works:
126+ - [Personal website](https://talfus-laddus.de/)
127+ - [Sourcehut](https://git.sr.ht/~talfus-laddus)
128+ - [GitHub](https://github.com/matthiasschaub)
25129
content/grants/2023/uc-concierge.md+2−3
@@ -11,12 +11,11 @@ grant_category = ["Other"]
1111image = ""
1212description = "The Urbit Community concierge will triage Urbit support issues that come in through the Urbit Community Group."
1313reward = "1 Star"
14−assignee = [""]
15−champion = [""]
14+assignee = ["~sarlev-sarsen", "~ripnyt-ripnyt", "~doppeg-tonwel"]
15+champion = ["~poldec-tonteg"]
1616grant_id = "B0232"
1717completed = false
1818canceled = false
19−work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=B0232&prefill_Grant+Name=Urbit%20Community%20Support%20Concierge"
2019
2120+++
2221