Development Update #96

Finished some small things, but mostly design work

There are some minor changes


This is ready to go almost, but have to finish


The GUI for interaction with networking and meshnet configuration is extremely frustrating. I am trying to find some way to take a shortcut or make this easier.

I feel like I am rewriting a bunch of software from the 70s and 80s, such as ncurses and pseudo terminal multiplexing… I think if I just keep coding, that it will work out.

There is a new programming technique called CODA that is extremely powerful. TCP/ip implementation is about 20,000 lines in C. In Alan Kay’s CODA type environment, TCP/ip type flow control can be implemented in 150 lines.

He was able to implement a full operating system from scratch, with document editor, email and a webbrowser, in 20,000 lines of code

The mesh network requires something like this and may have to implement a simple scripting language for this.

After two weeks, I figured out how to implement it in very few lines but still has to be implemented and debugged.

This is extremely occult tier mathematics. - The programs in this language, do not have a representation as a text file - The syntax looks exactly like golang - All programs are deterministic - The programs have a very elegant algebraic representation - there does not appear to be a difference between local program objects and program objects on a remote machine - the programs accept only length prefixed bytes as input and emit length prefixed bytes - it is recursive (turtles all the way down), in that you can instantiate a “world” or program context and within that context, instantiate three “worlds” or program contexts (own computers) and network them (top level passing messages between them) and run them. The top level programming context appears to be recursive. - the programs are constructed by applying a series of operators on an object starting in a null state - the programs themselves are program objects - the meaning of the program or action of a statement upon the program state is not fixed, but defined in terms of another program object - it is impossible to write software that is not open source in this language

When we use the computer, we do not interact with software objects. We interact mediated through the computer but not on “computer objects”, but rather interact with twitter, facebook, youtube mediated by the computer object, tool, interaction

There is a triangle like this, with - the object on the left (representation, visual thing, object) - the interaction/goal or outcome on the right (pragmatics, what you are doing, the operation or action) - the tool or action at the top (the intermediating thing, the tool that immediate between the object, the reification of the action)

An object starts as a null state, then a finite series of actions are applied to it - a twitter feed starts empty and then “create tweet” actions are applied in series - a coin starts with an unspent output set, then transaction actions are applied, that destroy unspent outputs and create new unspent outputs - a text file is opened and begins empty, then a series of key press or “insert characters”, “remove characters” actions are applied - a wikipedia page starts as a blank text file and then a series of “apply diff” actions are carried out upon the state

The state of the object and the sequence of reifed of the actions to the current states are dual. They are isomorphic and equivalent. - starting with the null object and applying the actions in series to the state will yield the same result as transmitting the current state itself

This may seem abstract, but the reason it is important is that the nodes act like agents - they have a goal (such as multiplexing packets across multiple connections) - they have multiple things or actions they can attempt in order to possibly achieve the goal - they have to choose a sequence of actions to accomplish the goal

This is needed for constructing a program, which can be set with a goal and which can attempt a series of actions to accomplish that goal. - “retransmit messages from a list of messages, until a receipt confirmation has been received from the destination” - “find a list of peer who each have data item that hashes to H” (DHT lookup)

Downloading a file is - “find a list of peers who each have data item that hashes to H” - “from the list of peers make download requests for chunks of file, until all chunks are received”

This type of program is not procedural or declarative, but uses both and is defined in terms of behaviors.

The language actually looks identical to golang, except that there is a meta-syntactic operator for creating higher order structures like behaviors, attributes, goals and higher order concepts for implementing things like this.

The language has everything stripped out, so I may be able to implement it in a few thousand lines. I am trying to figure out - should I do this later - should I do prototype first before writing this

The largest problem is that I dont have a pseudo-terminal that is cross platform and I need a meta-circular interpreter for driving the terminal gui widgets and the best way to do that is an early version of the scripting language.

The scripting language has added security benefit of being memory safe. In theory, you can strip out the whole operating system and just have a program for the networking drivers and another program for disc.

No translation bounty

Read about the Skycoin Bounty Program

Discuss this post on telegram

Skycoin Telegram