Blockstack is building an ecosystem that gives your users control over their fundamental digital rights: Identity, data-ownership, privacy, and security. Join us and help build the new internet.
This week, Stephen tasked us with creating a Content-Addressed Resource on the distributed web or Dweb.
Create a resource (for example, a web page) using IPFS, Beaker Browser, Fritter, or any other distributed web application (see some of the examples here). Provide a link to the resource using any method you wish.Source
To help prepare for this task, watch the video ‘From Repositories to the Distributed Web‘ as well as these videos on IPFS and Beaker: installing IPFS, making a website with IPFS, installing Beaker.
The final results
- Click to view my IPFS site.
- Click to view my .dat site using Beaker browser (or another .dat enabled browser). I probably need to consider hosting it on hashbase.io in order to keep it available when I’m not online.
Dweb – The letter D in the popular shortened version stands for either decentralised or distributed. Here’s a visual depiction:
The conceptual framework behind the creation of a decentralised or distributed internet is an attempt to replace, improve upon, or at least run parrallel to, the current centralised web (based on the web 2.0 premise). A feature of this current web is siloed platform specific engagement.
In part, this shift in thinking has transpired as a strong reaction to the centralisation of control and power in the hands of a few giant internet and tech companies. A decentralised, distributed web would, in theory, more evenly spread the balance of power, control, etc. across a network of much more people, in the hope of removing the reliance on using web 2.0 platforms to communicate with one another, thus diluting their influence.
Further, the dweb has been brought about by the need to create an immutable way to preserve the largest open and accessible collection of human knowledge ever created.
Here’s how I did it
Following Stephen’s video’s (linked to above) was very straightforward. They are very clear and thorough. The only real hurdle I had to overcome was that I was performing the operation on my Mac laptop rather than on a Windows device. All in all, performing the operations was much the same.
Downloading and extracting IPFS
The first task I set about was downloading and installing the go-ipfs distribution implementation of the Inter-Planetary File System (IPFS).
I unzipped/extracted the go-ipfs download into my home directory (davidmoloney$ in my case). It isn’t as easy as double-clicking on the .exe file in the directory and following an installation wizard I’m afraid! You are the installation wizard!
I opened up the terminal application on my Mac to begin the process of installation. First things first, I changed directory into the new go-ipfs one which, if you remember, I had saved to my home directory.
In Stephen’s video, in order to list the subdirectories within the go-ipfs directory on his Windows device, he types:
into the Microsoft Powershell. On the Mac terminal the equivalent command is
You could also type
if you were looking for some further detail.
It’s the “ipfs” file listed on the right hand side of the “ls” screenshot above that I am initially interested in. I want to initialise this file in order to establish my IPFS node. To do this this I type
Initialising the ipfs file generates a hashed peer identity for my IPFS node on the distributed web. It also creates a link for me to progress to the next step and open the Readme file.
I copied the hashed value that had been generated in the terminal (by highlighting it and using Command+C) in order to open the Readme file, also ensuring to copy the
code that comes immediately before the hashed string. Stephen notes the importance of this in his video. Without the “cat” prefix piece the command will not run properly.
I typed and pasted the following command into the terminal to open the Readme file. You will replace the *ABCD* section in the code below with the hashed public key that is generated for you (although I think it’ll probably be the same anyway – ending in “Vv”).
../go-ipfs/ipfs cat /ipfs/*ABCD*/readme
The Readme.md file should open for you within the terminal.
Starting the daemon service
Once initialised it is important to get the IPFS service up and running by starting the daemon service
I love how Stephen pronounces daemon in his video – demon! Very Irish!
The IPFS Companion Add-on for Firefox
Ordinarily, it seems that by then browsing to the web address produced after running the daemon service (http://127.0.0.1/tcp/8080) I should be able to access IPFS via my browser. However, without the IPFS Companion add-on, I couldn’t get to that point using Firefox.
Once the IPFS Companion add-on is installed you can click the small icon in the browser bar and then select the Open Web UI option to view a dashboard interface.
Creating and hosting my simple website on IPFS
I followed Stephen’s guidance in his video and used Gio d’Amelio’s quick tutorial to get my simple website set up and hosted on IPFS.
Using the Sublime Text 3 text editor for code, I copied and pasted the sample text provided in the quick tutorial and created basic index.html and style.css files. I saved the files in a subdirectory that I similarly named “ipfssite”, following Stephen’s lead.
Adding my site to IPFS using the terminal
I opened a new terminal window and changed directory into the go-ipfs directory within my home directory again
From here, I ran the following command to add the .html and .css files within my ipfssite subdirectory to my IPFS node.
./ipfs add -r ipfssite
Doing this produces hashed values for all of the files and also the entire site. The very last hash value before the command completes is the hash value to use to browse to your IPFS site.
Finally, I decided to install the beaker browser and establish a new .dat website also. This post is already a little unwieldy so I won’t detail how that went, but it was all pretty straight forward. Ultimately, I simply followed along with Stephen’s video instruction which was excellent.
For #EL30 this week, the topic of Graph is explored. This blog post will not address our task for this week but will instead capture some of what I’ve been considering about the topic and some excellent resources I’ve found that have helped to shape my thoughts.
The graph (think network, community, ecosystem of connections) is seen as being an important conceptual framework for the movement from web2 to web3. In essence, I conceptualise this movement as the gradual removal of current platform middlemen operating particular business models, with the replacement of that with more direct communication and interaction between one another over the internet.
Graph constructs aid with depicting distributed networked systems. Network science helps us to understand the ways in which these systems operate.
Conversation with Ben Werdmüller
The concept of graph was asserted by Stephen at the outset of the week:
The graph is the conceptual basis for web3 networks. This concept will be familiar to those who have studied connectivism, as the idea of connectivism is that knowledge consists of the relations between nodes in a network – in other words, that knowledge is a graph (and not, say, a sequence of facts and instructions).Source
Graphs, and especially dynamic graphs, have special properties, the results of which can be found in social network theory, in modern artificial intelligence, and in economic and political theory.
Ben and Stephen delved deeper into this concept during their online conversation and touched upon a possible future that can be derived from the movement to web3.
Stephen described the common traits of a number of network structures and systems.
Some common networks:Source
– A social network (or social graph) which is made up of people (and sometimes bots pretending to be people) connected by relations of ‘friending’ or ‘following’ and interacting by means of ‘texting’ or ‘messaging’.
– A neural network, which is made up of neurons (or, in computers, artificial neurons), connected by means of axons or connections, interacting by means of ‘pings’ or ‘signals’
– A financial network, which is made up of accounts, which have ‘balances’ of various sizes, and which are connected through contracts and interact through transactions
– A semantical network (such as the Semantic Web), which is a collection of resources connected through an ontology and which interact through logical relations with each other.
In all of these, the core idea is the same. We have a set of entities (sometimes called nodes or vertices) that are in some way connected to each other (by means of links or edges or transactions or whatever you want to call the linkage and the interaction through the linkage).
Graphs help us to recognise the relationship between the actors and how they interact with each other within the environment. It isn’t necessarily the individual objects that we should focus on when conceptualising graphs, it’s the things that anchor the objects together that prove interesting, the connections.
It’s difficult for a graph to tell us everything about a networked system, they can be a very effective visual framework to help us recognise the constituent components of the network and how they all operate, however, it further allows us to begin to recognise elements that cannot be seen with our eyes – the invisible, underlying, subtle and nuanced contacts, properties, connections and interactions – the currents that flow within the graph structure that shape it, it’s electromagnetic force, for want of a better term. The graph itself depicts the physical format of a network but it is what the graph allows us to visibly and invisibly perceive in greater depth is what makes it important.
In connectivism we have explored the idea of thinking of knowledge as a graph, and of learning as the growth and manipulation of a graph. It helps learners understand that each idea connects to another, and it’s not the individual idea that’s important, but rather how the entire graph grows and develops.Source
An example of a directional graph might be one that looks at the reporting relationships in a hierarchically structured institution or organisation. At the top of the hierarchical structure might sit the CEO or President, beneath that the layer of Vice Presidents, Chief Operational Officers, Chief Finance Officers etc., beneath that layer might sit the directors of divisions or departments, beneath that the managers and coordinators layer and then the employees working within teams. The reporting relationships would commonly flow upward in one direction from the base of the hierarchy, layer by layer, towards the top.
A real life example of a static bidirectional graph might be a return journey flight path. For a flight where a stopover is required before arriving at the desired destination, you would depart from your origin airport, travel via your waypoint stopover, and arrive at your destination destination – let’s say Dublin (origin) to Copenhagen (destination) via Oslo (waypoint). The return journey demonstrates this in reverse.
Examples of dynamic graphs that may have either directional or bidirectional relations between vertices would be the internet, social networks and perhaps a less obvious example might be historical timelines (directional, as time advances).
The use of dynamic living graphs appear across many of the fields of science, anthropology, psychology, etc. and are particularly common within computer science, machine learning, and artificial intelligence. In computer science we can perceive graphs as Merkle Trees and Directed Acyclic Graph’s (DAGs), used in GitHub software version control.
Some very helpful resources
Coming off the back of last weeks conversation with Tim Hirst, where we touched upon Jupyter Notebooks as a way of actively and dynamically learning and practicing, I thought I’d explore the web for an interactive dynamic simulation of Graph Theory in order to learn a little more about it. I came across a very useful Graph Theory resource created by Avinash Pandey on Github that models 3D graph structures.
In my online search to better understand this topic I came across another great resource by Nick Case that helped me to think in terms of graphs and the science of networked systems. The resource is an interactive online game called Crowds. In it, Case attempts to deconstruct theories of network science to use as a plausible explanation for the phenomena we know as The Madness of Crowds/The Wisdom of Crowds.
There were a number of key takeaways from this resource for me. Concepts about complex connections were introduced wherein the greater exposure someone has to an idea amongst their social networks, the greater the chance that they will be influenced by it. Threshold factors might also influence whether an idea spreads beyond certain nodes in a network.
The resource further looks at the idea of contagion, explores consensus and concludes by examining the importance of such concepts as bonding within networks, bridging between networks, and the immutable influence of Small World Networks.
One of the sources cited in Case’s resource is a book co-authored by Nicholas Christakis and James Fowler called Connected, which analyses the importance and value of connection, of network, of community and the influence each of us can have on it, and it can have on each of us. Here are links to the book and a thought-provoking TED talk on YouTube (18 mins), which gives an insight into the impact of our social networks. From their research they coined the ‘three degrees of influence’ theory, essentially arguing that, even though the influence dissipates, it may be possible for our actions, behaviours, etc. to have consequences and influence up three degrees of separation away from us (our friends’, friends’, friends). This theory is contentious.
In the TED talk, Christakis discusses common objects – a pencil and a diamond – both made from carbon. But the carbon atoms in each are connected and arranged in different ways. The lead in a pencil is soft/breakable and dark, diamonds are hard and clear. Both items have the same underlying properties, however, they are connected in different ways and this effects what they become.
According to Christakis, those properties (soft, dark, hard, clear)
“do not reside in the carbon atoms; they reside in the interconnections between the carbon atoms, or at least arise because of the interconnections between the carbon atoms.”Source – timestamp 15.09
“So, similarly, the pattern of connections among people confers upon the groups of people different properties. It is the ties between people that makes the whole greater than the sum of its parts. And so it is not just what’s happening to these people — whether they’re losing weight or gaining weight, or becoming rich or becoming poor, or becoming happy or not becoming happy — that affects us; it’s also the actual architecture of the ties around us. Our experience of the world depends on the actual structure of the networks in which we’re residing and on all the kinds of things that ripple and flow through the network.”Source