Some ideas for projects moving forward


#1

Hey everyone,

I’m a long time reader of this forum and I have been spending as much time as I could afford reading through the maidsafe code. I am a believer that the autonomous network approach taken by maidsafe can form the foundation of a completely new way to interact (both with data and with eachother) on the internet.

I just finished study (CFA exam) and now I am going to turn all my attention to understanding the nuts and bolts of maidsafe and building something on top of it. I have a few ideas for projects and wanted to get some feedback from the community before I dive in.

Idea 1: Fork Bitcoin-qt to maidsafe
This would have two important projects within and I am not sure how much work will be involved with each of them. For one I would want to save the blockchain to maidsafe to make bitcoin-qt a lightweight client. Two, I would want to be able to save files (a drive of some sort) that can be unlocked using a private key held in the wallet. This way maidsafe can piggyback it’s security, and user identity from Bitcoin. This, I believe, will also help immensely with adoption. If my Bitcoin wallet can store unlimited personal files securely, and allow easy encrypted communication - suddenly Bitcoin is more attractive to the average user. Maidsafe and Bitcoin are both important pieces of a decentralized future and Maidsafe should look to build on Bitcoin not compete with it.

Idea 2: Create a simple API that allows i/o streams in C++ (or other language) to link directly into files on the network. A simple interface like this could have unlimited applications as developers realize that the files created are available anywhere, can be modified from anywhere and are secure (both from attack and from loss). Specifically, I think a simple interface like this could be super useful in managing business data.


#2

Hi, and welcome! Ideas ideas yes please…

I may be missing something, but I don’t see the benefit of this. There are already lightweight wallets that keep a centralised copy of the blockchain so the client doesn’t have to. Yes, they could switch to using SAFE, which might be a bit more efficient for them (costwise), but it doesn’t change the centralisation issue - you have to trust that copy of the blockchain and anyone who is able to write to it.

SAFE is a competitor to bitcoin, because its currency Safecoin has the potential to be a much better crypto-currency. Whether it runs alongside or ultimately supplants bitcoin, who knows, but it certainly is worthy of its own place - the first true alternative cryptocurrency as far as I know. Everything else so far seems to have little to differentiate it, and suffers the same basic drawbacks as bitcoin. Even side-chains seem to be a fudge by people who can’t see beyond a blockchain… yet! :slight_smile:

This sounds interesting, quite a simple app I think, at least in concept. Can you flesh out the applications side a bit more. Some use cases if you have any in mind?


#3

Yes please! We are going to need a lot of “lower” level stuff to make any higher level stuff possible.


#4

‘Drive’ https://github.com/maidsafe/MaidSafe-Drive/wiki/Documentation implements a native virtual disk that maps onto the SAFE network, with random read/write access from a file system interface.


#5

This is the one. We are looking to update the NFS layer to do exactly this. So a full posix compliant set of calls that map directly to the network. If you check the Drive API and then look at Encrypt you may see what I mean. Feel free to jump on mumble for a chat about this. It is right on our roadmap though and if others got into that then it would be amazing. We can provide much of the info you require to do this and build a mini project if that would help. At the moment we have store file get file type calls there, just until we finalise the posix interface, it is a very neat way to go.

I will unveil another addition very soon. I discussed it on the mailing list this week https://groups.google.com/forum/#!topic/maidsafe-development/Uf2rinC90K4


#6

I will try to communicate what I have been thinking as clearly as I am able to. A
little context first, I work at the corporate office of a mid-sized
steel company. We manage all the inventory (purchases, transfers,
cuts, sales), employees, and accounts payable for all branches. Our
use of technology is not good. Downtime is common; technical problems
are ubiquitious. The canned, commercial software that we use wastes our
time and my (admittedly ambitious) goal is to create a system that
can replace it. If I can build it (secure and stable), I believe I
will be able to convince my company to use it. I intend it to be open
source, and customizable: a part of the set of applications that
brings businesses into the Maidsafe network.

Maidsafe is a complete gamechanger in building an application like this, and
although there is a lot of work to do, it seems to me the technically
challenging aspects have been taken care of by the maidsafe protocol.
What is left is to build a framework, or a model, of the company that
can track all of the moving parts in a controlled way. It’s my theory
that using the data structures inherent in C++ (this choice is biased
by my current goal to learn C++) is an efficient way to accompliosh
this goal.

For example each branch could be represented like this:
Public Class Branch
{
inventory* stock;
employee* team;
overhead* fixedcosts;
expenses* costs;
float cashonhand;
};

Public Class
Inventory {
string supplier, insurance;
inspection* condition;
float weight;
inventory* next;

int transfer(Branch, Branch, Inventory[], Carrier);
inventory[] cut( inventory* );
// etc. Many more
};
//Depending on the type of inventory, it is important to track different measurments.
This could be accomplished using derived classes. For example:

class coil : inventory {…};
class sheet : inventory {};
class rebar : inventory {};

The details of what information needs to be stored for each type of inventory will not
effect the ability of the linked list to point to all of them. This
creates good flexibility to expand to new products.

I believe a way to control the creation & manipulation of our data is to have
all access to it restricted to functions. All access to functions
will be restricted to employees who have been authorized
appropriatly. (ie a recieving clerk at NewYork branch will have
access to ONLY functions recieving inventory at ONLY the New York
branch — our current system all employees can post to any branch and across jobs so mistakes are inevitable & hard to catch). It seems to me a good place to put the security to do this is directly in the employee
class. The manager when hiring / promoting / firing would add or remove access rights for individual functions and within the code for the functions would have a check on who is making the call. I believe
that maidsafe passport will make this easy because each employee will have a unique PMID (public maidsafe identity - how best to implement?).

This is getting long so perhaps I should stop here. Any feedback on how/if this could work and advice on where to really get started is appreciated.

Taylor,


#7

@11Bills thanks for elaborating. I can’t comment at this level of detail - its kindof upside down for me, and I’m rusty on design and C++ having not done significant programming for over a decade.

I’d recommend learning the tool before trying to create the product (and be aware it might not be the best tool for the job), or at least be prepared to throw the first code away and re-write once you’ve learned how to do it - or get some folk together who can work with you of course.

Learning on a real project is also a great thing to do, and that’s what I did in the past so I’m not saying don’t! :slight_smile:

I still don’t understand how you intend to use streams. I assume you mean for serialising data, and for small scale data that might work, and it might even scale well on SAFE, or it might be necessary to use a different approach, but I can’t answer those kind of questions. Good luck though. I support your aims and hope you can make this work. Sounds like @dirvine has something useful for you!


#8

This is a way to go, for a great way to manage quantities look at boost::units (Stephen is a phenomenal programmer) or even the new string literals in c++11 That will allow you to have units like mm M (gm pounds etc.) and convert between them and also force type checking. So no 5gm of X where X requires a different measurement (like length etc.). This will guide the design and make a very type safe system where logic errors will be caught at compile time. Also look into concepts lite which are likely in c++14 but available now in clang. Very impressive for complete type safety and generic programming.

Great luck and if its OSS then we can all chip in and critique etc. which may help.