[piston.web] First Open Source Steem GUI - Searching for alpha testers

in #piston8 years ago (edited)

Piston.web - Standalone User Interface

Many may already know piston as a tool that simplifies interaction with Steem/Steemit. You can read, post, comment, edit, transfer funds and much more, if you are willing to use the command line.

This changes now. With piston.web, the toolbox now comes with graphical user interface that you can access via your browser. It is fully independent of steemit.com, which means that you can do what you love doing on Steem, even if steemit.com goes down.

Available Features

  • browsing steem posts
  • reading full posts and comments
  • reply to topics and comments
  • upvote/downvote
  • read account details
    • recommended posts
    • blog posts
    • funds
    • transaction history
  • integrated wallet
  • full encrypted (AES + BIP32) for private keys
  • import keys from account name and password

Screenshots

Browse:

Account

Funds:

Post:

Wallet:

Installation

Until we leave pre-alpha, piston.web is on a different branch.

git clone https://github.com/xeroc/piston
cd piston
git checkout feature/standalone-web
make install-user
# install extra requirements for piston.web
pip install -r requirements-web.txt

Usage

piston web

On first run, you will be asked to provide a passphrase for your new wallet. Empty password are allowed but result in private keys being stored in plain text.

After that, you will see

 * Running on http://127.0.0.1:5054/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger pin code: 227-869-909

Ignore the debugging output and start using piston.web in your browser
by accessing

http://127.0.0.1:5054/

NOTE: piston.web will only be reachable from the same machine (localhost).

Technologies

Backend

The backend is written in python using

  • Flask (with Jinja2)
  • python-steem.

It offers the HTML files and a Socket-IO for real-time communications.

Frontend

These technologies have been used so far in piston.web:

  • Bootstrap
  • Markdown
  • Font-Awesome
  • Plain Javascript

Wallet

The wallet is only accessible from the backend. All keys are encrypted with a random master password that is stored in an SQLite3 database in its AES encrypted form. Each private key is encrypted with the master password using BIP32 and stored in a SQLite3 database. The wallet will make backups of the SQLite3 database every week and keep several weeks of backup.

Todos

  • Transfer of funds
  • PowerUp, PowerDown
  • Trading
  • Account Administration (changing keys etc)
  • Allow to attach JSON object to posts
  • Secure socket.io with a password
  • layout and style improvements

Contributions

Currently, we are looking for the bravest of the bravest to help us test what is already there and give

  • bug reports
  • improvement proposals
  • feature request

Please use the github issue tracker to make it easier for us to remember all the feedback.

Important Note

piston.web is alpha software. For that reason, you need to expect it to break at any time. Use at your own risk.

Update 1

I'd like to clarify that this GUI is not meant to replace steemit.com or be used as a hosted, public site. It rather offers a personal, localhost-only page that you can use to access your wallet. Exposing the piston.web to a publicly accessible port is not recommended!

Update 2

I fixed the sqlite3.OperationalError: unable to open database file error earlier today so that people can actually take a look.

Update 3

More short-term fixes for the weekend-testers:

* [2016-07-23][bf3dae5] | [setup] make sure the user uses python3
* [2016-07-23][c31eec7] | [web] highlight own posts
* [2016-07-23][03e0d2f] | [web] fix reply identifier not in the form
Sort:  

I'm so geeked about this... I feel like I just need to take the day off and dive right in (though I also want to do a code review). This, to me, is the key to this whole experiment which will, in a sense, save the Internet. This gets us closer to what the Internet was supposed to be: an interconnected web of decentralized content which could be modified with a POST or PUT and retrieved with a GET. When people can run a copy of their own favorite social media platform from any device any where in the world and "the server" never goes down because there is no server besides the blockchain, that's just amazing. Might also be amazing to have contributor keys which allow people to edit/post on shared accounts. Man, the possibilities are mind blowing.

Thanks for putting this out there, @xeroc.

Wow, I think I get what you are saying here... I've never thought of it like this... that's amazing. I'm thinking the server is replaced with a peer to peer datasource/database ? (Well I guess that's what the blockchain is). Kind of operates like DNS? So each node doesn't need to store the whole blockchain, just the parts it has accessed. Something like that, or am I missing it?

There are public API nodes (such as this.piston.rocks) that run the same database as steemit.com (technically, that database is a blockchain). That said, you can

  • use steemit.com and their semi-public API
  • connect to this.piston.rocks and use that one
  • or deploy your own node and use that one

Technically, there is a way for public APIs to profit from offering a public API node and that is: People are asking for the latest posts in a category with a certain sorting, but no one prevents the API provider to put their own posts higher in the ranking. No one actually even prevents them to give your wrong data. That said, you shouldn't trust any public API unless you trust the operator but on the other hand, the API provider can use it to monetize their public api service.
This of this as a google ranking. If you get the posts from steemit.com, you will see their ranking while when you use another service, you will see another ranking (potentially added extra posts to fund their server) .. the only way to get a neutral picture is to use your own server or maybe pay for a neutral party to provide a neutral point of view.

As a note, this.piston.rocks currently provides the most neutral point of view there is but that might, or might not change ..

Ok, yes I see.
I'm wondering if there is a way to avoid having to store the entire blockchain on a node. There are probably many problems with this idea. But I can see blockchains growing very large over time. I'm sure the steem or other blockchains have figured this problem out or are working on it.
Now that I think about it, my idea of not storing the entire blockchain, violates one of the fundamental ideas of blockchains, trust. But as you said, you also have that problem when using someone else's API to the blockchain.
Sorry, just thinking out loud here.

The idea is to let them be hosted by companies and witnesses and people only interact with the public API nodes .. pretty much like blockchain.info or electrum use light-weight clients.

Hey am new on steemit please support me to grow.
Hope you will help me out....

https://steemit.com/mgsc/@cryptoturdz/countries-from-where-whales-belongs-in-cryptocurrency

Similar to SP, SMD tokens cannot be purchased directly on an external exchange. SMD are primarily earned through contributing but can be purchased by converting STEEM tokens to SMD tokens.

Actually Steem Dollars can now purchased on external exchanges !
https://poloniex.com/exchange#btc_sbd
https://bittrex.com/Market/Index?MarketName=BTC-SBD

PS Abbreviation of SBD = Steem Backed Dollars
or just SD = Steem Dollars (not SMD please edit)

"from any device any where in the world and "the server" never goes down because there is no server besides the blockchain, that's just amazing"

This! Remember all the times your favorite sites have downtime and/or DDOS and/or something else. No downtime on blockchain, ever!

Currently, there still is a central point of failure and that is the this.piston.rocks API server. However, I plan to extend this quite a bit and use geolocated DNS with several servers around the globe to make it more robust ..

I think it would be more impotent to have a way for independent community members to run API nodes them self, then having a nice geo redundant deployment managed by one party.

What dose the API Server consists of? Is this just the API of steemd or is there another service involved and if so would it be possible to have the code available to play around with and try to build a independent setup connecting to a local steem-node?

Not to be ungrateful, my first reaction to this post was off course: awesome, finally a way to use steem independent of steemit.com like a real decentralized app. And it still locks to me a lot like that, only this small part seems missing, so thanks a lot for this awesome project!

Loading...

Wouldn't it be a good idea to offer an incentive for running an API server in steemd itself? Like Masternodes for DASH, or an Incentive Node for VCASH.

Absolutely, I think it can be easily done by just asking Steem to pay for their public APIs. A post about the APIs statistics now and then might bring in enough money to continue service. Time will tell.

Is it hard to run your own API server?

I think someone has even created a docker image for steem .. search on steemit or github

Yes it is hard if you are fluent with the required programming language.

Funny, my original comment mentioned having thousands of clones of this.piston.rocks, but I ended up removing that part before I posted and talked about how this gets us a step closer. Maybe some day that code can also be decentralized, self-hosted, and distributed. Either way, thanks again for all your hard work, @xeroc! To me, stuff like this is the difference between success and... something else that isn't success. :)

In the realm of decentralized services, I think that consul is really, really overlooked, especially the potential of consul, coupled with ultra-low-cost servers. Once a machine is in a consul cluster, it is "bound" to the consul master and that master can execute commands on it as though it were root.

Consul also manages services and service discovery.

It can be run alongside Nomad, which can schedule anything that can be run on linux in an extremely neat, tight fashion.

I wanted to add the ability to change the API node. piston allows that already, but the gui has no feature for that yet. It will come for sure.

Yes, we need each one a node, unfortunately actually steem doesn't build on ubuntu 14 or debian jesse so it's really difficult to get one, the to be sure nobody will get one they take this wonderful instructions https://github.com/steemit/steem/blob/master/BUILD_UBUNTU.md and no bin release https://github.com/steemit/steem/releases actually I find this a shame... Fortunatly at least @xeroc works with us :)

It's not entirely correct. The default piston setup connects to this.piston.rocks as the backend API server. However you can already change it to your own node by running

piston set node ws://ip:port

There will be a nicer gui feature to do this eventually.

WoW 40 grand dollar fot this post, thats way beyond sick :o

Would be interesting if this became a successful method for funding open source projects wouldn't it?

Absolute ;)

Considering the work Xeroc does? This is like maybe half what a single developer would make in a year. Xeroc has been giving away tons of free code for the bitshares community as long as there has been a bitshares. I just did the math at 40g's he's made about $1.50 per hr.

Yeah it's sick. This man is probably the least appreciated contributor here. This tool is friggin awesome! I don't do python but I'm reading the code and learning the internals of how this stuff works, which is great because our devs don't do documentation.

Wish there was a tipping option for people like Xeroc!

WoW 40 grand dollar fot this post, thats way beyond sick :o

I tend to agree. Thought it might reach a couple $k, but >$40k is .. quite some appreciation :)

Me also. But you deserve it. You did an super jobb making this. This is why steemit is so amazing. It helps out who deserve it. Keep up the good work mate. Im suprised

Good comment

A dream come true :D

I still have that Acidyo BitcoinTalk account available for sale 60 Steem and its yours.

Hey am new on steemit please support me to grow.
Hope you will help me out....

https://steemit.com/mgsc/@cryptoturdz/countries-from-where-whales-belongs-in-cryptocurrency

I need to learn how to build/install it. Do you know any good tutorial on how to build this kind of built?

Tutorials will come when the product is read for the masses. The current code is rather a Proof of Concept and in Alpha stage, even though it can already be used for quite some things. Give me some time to improve it further and I am sure I can release something stable in a bit .. (no ETAs in software development)

one step closer and piston is crushingit :)

Buufaaaa... Uuuuuuh buaaaaaahhh 44.000$ and increasing! ! Its a buuuuuuuuuufff....

i asked myself how is it possible to make so much cash for few words

I'm more geeked by the fact that pistons can generate steem, piston, steem, seewutididthar?

Cool GUI bro.

Thanks @trogdor!

I don't think the early Internet pioneers were as excited as we are right now. When they typed out SMTP commands in their terminal or transferred a file from one university campus to another, I can't imagine they had any idea what they were birthing. We, on the other hand, live with those results all around us. It's hard not to imagine an even more amazing future given the results of the past we currently enjoy.

but the blockchain rely on infrastructure no?

As in internet connectivity between nodes? Yes. This is also something people are working to solve by building mesh networks, custom wifi networks, or even balloons such as the Google Loon project. https://outernet.is/ is another interesting example using micro satellites. Hopefully soon we will decentralize all the things!

Already been solved, you just need to use it.
https://en.wikipedia.org/wiki/AMPRNet

Yep, one more I forgot to mention in my list! :)

It might sound great in theory, but in reality it might be much harder to realize. Due to the blockchain size after a few years you might need a very powerful computer to host the blockchain, which isn't possible for "normal" devices. Just my 2 steem.
Anyway xeroc's libraries are always top notch. Thump up for him.

I don't think you will need a lot of "power" to host the Steem network long-term. You will need a lot of disk space, but disks are cheap. The only difficult things for the node to do is a replay. Those currently take about 2 minutes (a joke if you conpare to other blockchain techs). Either way, the underlying technology is soooo awesome, that I don't see a scalability issue in near future.

Oh, btw, on this.piston.rocks, there are actually two witness nodes running in parallel, connected to nginx via fail-over/load balancing. That means, I can update the code and replay the one node, while still serving the traffic with the other node and vise versa :)

I read your codes and learn a lot from it. Thanks Fabian.

Hey am new on steemit please support me to grow.
Hope you will help me out....

https://steemit.com/mgsc/@cryptoturdz/countries-from-where-whales-belongs-in-cryptocurrency

Steems away!

Not usually upvoting animated gifs, but that one is cool, original and relevant so exceptionally...

firing on all cylinders

It's refreshing to see a new gif aside from that Game of Thrones one =P

Ok, now that deserves a 5-figures payout!
@xeroc: do you have a witness account to help you support developments?

I do not run t apprecitae your offer for an upvote.

Ping me on Slack when/if you do: @talerecursion

Looks pretty awesome! I may try to run it up on one of my servers. If I do I'll definitely get linked up on github to keep you updated.

This is for personal use .. it does not allow others to login .. if you expose the web to the public, you will compromise your private keys. The purpose of this is not to host a new website, but to offer a standalone app that people can run at home .. locally!

Oh, haha, I've gotten so used to experimenting with things on my server I just jumped to assuming it was to be a web app. Thanks for the clarification.

You might want to make a big fat warning on this post and in the READMEs about this point. It was only clear after a bit of thinking, that this really is intended to be something you run locally.

You might even consider adding some strong speed-bumps before anyone can use something other than 127.0.0.1 to serve content.

This is definitely a game changer. It brings decentralization to a whole nother level. The analogy is now like BitTorrent, where in this P2P setup all can just run a client node and connect to the network. Here, even if steemit.com were brought down, people can start up their own node and connect to the blockchain! Genius!

Looking great. I'm a UI designer and I'm think it was definitely a good decision to use Boostrap for the graphic interface, it's very clean and easy to navigate.

I absolutely love this! I have some ideas for a few things I'd love to see added that could make things even easier.

I assume you're open to pull requests? Expect some chatter from me via slack too :)

Yea feel free to contribute, i will also start work on the GUI design improvements this weekend.


I am glad you will take more rewards than she did...

xerox, looks great. Lets get it tested and out of alpha. Could the piston toolbox be used for an App or DApp!? Or maybe package it with a server for mobile use!

@xeroc I tried to use your piston.web, put there's an error that I cannot figure out. This is it:

Traceback (most recent call last):
File "/usr/local/bin/piston", line 9, in < module>
load_entry_point('steem-piston==0.2.3a0', 'console_scripts', 'piston')()
File "/usr/local/lib/python3.5/site-packages/pkg_resources/init.py", line 542, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/usr/local/lib/python3.5/site-packages/pkg_resources/init.py", line 2569, in load_entry_point
return ep.load()
File "/usr/local/lib/python3.5/site-packages/pkg_resources/init.py", line 2229, in load
return self.resolve()
File "/usr/local/lib/python3.5/site-packages/pkg_resources/init.py", line 2235, in resolve
module = import(self.module_name, fromlist=['name'], level=0)
File "/usr/local/lib/python3.5/site-packages/steem_piston-0.2.3a0-py3.5.egg/piston/main.py", line 9, in < module>
from .storage import configStorage as config
File "/usr/local/lib/python3.5/site-packages/steem_piston-0.2.3a0-py3.5.egg/piston/storage.py", line 321, in < module>
if not configStorage.exists_table():
File "/usr/local/lib/python3.5/site-packages/steem_piston-0.2.3a0-py3.5.egg/piston/storage.py", line 120, in exists_table
connection = sqlite3.connect(sqlDataBaseFile)
sqlite3.OperationalError: unable to open database file

I ran into this problem and reported the bug to @xeroc already.

The workaround is to do:

mkdir ~/.local/share/piston

When do I type in this code?

I missed two lines of code to generate the above directory. You can create that directory by hand to fix the error. I will fix the repository asap

I fixed this issuer earlier today, you may want to run a git pull and reinstall

Thanks for the help, but... I have encountered another problem... here it is :

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/private/var/folders/7x/_dsd44s94_nft92r9myn3y0h0000gq/T/pip-build-MsWRmL/websockets/setup.py", line 17, in <module>
    with open(os.path.join(root, 'README'), encoding='utf-8') as f:
TypeError: 'encoding' is an invalid keyword argument for this function

----------------------------------------

Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/7x/_dsd44s94_nft92r9myn3y0h0000gq/T/pip-build-MsWRmL/websockets/

Note : I am running a Mac OS X

Thanks for the help, but... I have encountered another problem... here it is :

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/private/var/folders/7x/_dsd44s94_nft92r9myn3y0h0000gq/T/pip-build-MsWRmL/websockets/setup.py", line 17, in <module>
    with open(os.path.join(root, 'README'), encoding='utf-8') as f:
TypeError: 'encoding' is an invalid keyword argument for this function
----------------------------------------

Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/7x/_dsd44s94_nft92r9myn3y0h0000gq/T/pip-build-MsWRmL/websockets/

Note : I am running a Mac OS X

Please make sure to run Python3!

Coin Marketplace

STEEM 0.30
TRX 0.11
JST 0.033
BTC 64243.42
ETH 3152.93
USDT 1.00
SBD 4.28