Git Product home page Git Product logo

clutter's Introduction

Clutter

Code Status In Progress Gitter License: GPL v3

P2P twitter-clone built on holochain A group of cats is called a Clutter, Cludder, Clowder, Kendle, or Kindle. Maybe it's time for a fully distributed shoutcast network of cool cats to eat a certain bluebird.

Clutter is a work in progress, sample application which exists to demonstrate how easy it is to build applications on holochain.

Code Status: Pre-alpha. Not for production use. This application has not been audited for any security validation.

Installation & Usage

Prerequiste: Install holochain on your machine and make sure you do the step to set the $GOPATH.

If you want to run Clutter locally, you will need nodejs installed, with npm or yarn:

git clone https://github.com/Holochain/clutter.git
cd ui-src
npm install # (or yarn install)
npm run build # (or yarn build)
cd ..

Now if you want to run the app, you can run:

hcdev web # if you want to just run it temporarily and test it out, with scratch data

or

hcd web # if you want to really start to use the app

If you want to just see Clutter in action, the best way to try out Clutter on your own is to run 2 instances of Clutter and your own Bootstrap server. So download the latest release from Clutter Release, unzip it and make 2 copies of the contents into folders called clutter1 and clutter2. Both folders will have a dna folder and a ui folder in each.

Firstly run the bootstrap server which will let each instance of Clutter know about its peers. The bs command is part of the Holochain install. If it doesn't work you probably need to set the $GO_PATH variable. (Soon we won't need this step)

  bs

You will get a response like

2018/01/11 11:24:03 app version: 0.0.2; Holochain bootstrap server
2018/01/11 11:24:03 starting up on port 3142

Now start up Clutter in each folder.

  cd clutter1
  hcdev -no-nat-upnp -port=6001 -agentID=lucy -mdns=true -bootstrapServer=localhost:3142 web 3141

  cd ..
  cd clutter2
  hcdev -no-nat-upnp -port=6002 -agentID=phil -mdns=true -bootstrapServer=localhost:3142 web 4141

You will see a response like:

Copying chain to: /Users/philipbeadle/.holochaindev
Serving holochain with DNA hash:QmVbbeDAHVxC9cTvx6UhNEeTCK99SRKfxKDz3s4mR6TnsS on port:3141

Now open a browser at http://localhost:3142/QmVbbeDAHVxC9cTvx6UhNEeTCK99SRKfxKDz3s4mR6TnsS (substituting in the DNA hash from the response above if different) and look at the Bootstrap server. You will see 2 records like this

  [{"Req":{"Version":1,"NodeID":"QmTAjDmQHobs2oQZp4UrbSzkShUGVKcsQUdakHeQ4YYxRX","NodeAddr":"/ip4/0.0.0.0/tcp/6003"},"Remote":"[::1]:63187","LastSeen":"2018-01-11T12:32:15.659887156+11:00"},{"Req":{"Version":1,"NodeID":"QmWQVaqEayZJWnvxLtsKr1iyeTDp3s7m7TTE36HhAUTiTK","NodeAddr":"/ip4/0.0.0.0/tcp/6002"},"Remote":"[::1]:63153","LastSeen":"2018-01-11T12:28:40.85765899+11:00"}]

Now open a browser to http://localhost:3141 and you will see Clutter. Open another tab to http://localhost:4141 and you now have 2 instances of Clutter that you can chat between. Add a handle in each and then meow and follow each instance and you will see the meows!!

Docker Usage

You can do all this much easier with Docker. Download the latest release from Clutter Release, unzip it and cd into the folder. Then run

  cd ui-src
  npm install # (or yarn install)
  npm run build # (or yarn build)
  cd ..
  TARGETDIR=$(pwd) docker-compose up

This will build the source into a React app and install it in Holochain. Then you can open browsers to

  http://localhost:3142 - Bootstrap
  http://localhost:3141 - Clutter
  http://localhost:4141 - Clutter
  http://localhost:5141 - Clutter

and try out Clutter.

Tests

To run all the stand alone DNA tests:

hcdev test

Scenarios

Scenario - Collision Of Handles - Sequence Diagram

  hcdev -no-nat-upnp -mdns=true scenario collisionOfHandles

followAndShare

hcdev -mdns=true scenario followAndShare

This test spins up two nodes jane and joe and tests that following and reading posts works. To watch the network traffic and details try:

hcdev -debug -mdns=true scenario followAndShare

scaling

This test is designed to be run on separate machines and spins up many clones on each and confirms that they all talk to each other.

UI automation

in clutter folder

  hcdev -execpath=$HOME/.holochaindev1 -no-nat-upnp -port=6001 -agentID=agent3141 -mdns=true web 3141
  hcdev -execpath=$HOME/.holochaindev2 -no-nat-upnp -port=6002 -agentID=agent4141 -mdns=true web 4141
  hcdev -execpath=$HOME/.holochaindev3 -no-nat-upnp -port=6003 -agentID=agent5141 -mdns=true web 5141

if running all in one terminal you will need to kill the processes between restarts.

  kill -kill `lsof -t -i tcp:3141` & kill -kill `lsof -t -i tcp:4141` & kill -kill `lsof -t -i tcp:5141`

What the Automated build does

When a branch is pushed to Github Travis runs a build. The build does the following:

  1. Installs docker-compose
  2. Runs docker-compose up -d which spins up a bootstrap server and 3 instances of clutter
  3. Install the cypress dependencies
  4. Runs the Cypress e2e tests.
  5. If on master a new release is published to github releases. (coming soon)

Feature Roadmap and Current Progress

  • Set default handle from AgentID string
  • Enable users to change their handle
  • Share mews (tweets) -- up to 256 characters
  • Follow someone (by specified handle)
  • Unfollow someone
  • View post stream of people you follow sorted by time
  • Detect #hashtags in post text
  • Create hashtag anchors if they don't exist
  • Link from hashtag anchor to posts with that hashtag
  • Show posts which have a particular hashtag
  • Mark posts as a favorite ⭐
  • Link favorited posts from a user/handle
  • Show someone's ⭐ favorited posts
  • Edit a previous post (partially implemented)
  • Refollow someone previously unfollowed (partially implemented - Have to fix put/del/put links sequence)
  • Detect @mentions in post text
  • Link from handle posts which @mention them
  • Show @mentions for a user/handle
  • Lists - Special anchor type with text being "[userhandle]-[listname]" with links to users on a named list which is named unique-per-user
  • Reply to mew (add reply-to link + link to replies)
  • Remew/Retweet (link to original in content of post? + new content?)
  • Enable direct messages via N2N private messaging
  • Detect links
  • Include links (w/ link shortening?) as linked link
  • Pretty display of OpenGraph data for first link
  • Create/Read/Update/Delete User profile info (first name, last name, location, picture, website, etc.)
  • Keyword indexing/search with Holodex integration
  • Search with result groupings/tabs (people, posts, tags, trending, )
  • Add UI tabs/views: feed, mentions, direct messages, lists
  • Embed pictures ("pic" link to url) with pretty render
  • Integrate with Twitter for publishing mews to tweets from your unique userspace
  • Integrate with DPKI for bridging app contexts

Contribute

We welcome pull requests and issue tickets. Find us on gitter to chat.

Contributors to this project are expected to follow our development protocols & practices.

License

License: GPL v3

Copyright (C) 2017, The MetaCurrency Project (Eric Harris-Braun, Arthur Brock, et. al.)

This program is free software: you can redistribute it and/or modify it under the terms of the license provided in the LICENSE file (GPLv3). This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Note: We are considering other 'looser' licensing options (like MIT license) but at this stage are using GPL while we're getting the matter sorted out.

clutter's People

Contributors

artbrock avatar christopherreay avatar connoropolous avatar lucksus avatar philipbeadle avatar qubist avatar zippy avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.