History and motivations

Back in 2008 i was working to a middle-size software that allowed users to apply a digital signature to documents. The project was definitely low in budget and our salesman sold that it could also digitally sign medical data... The first medical image to sign was 1GB, the second 8GB, and our servers had at most 4GB of RAM. From here the necessity of having a long chain of streams that manipulated the data from the web to the database.

"Use pipes" they said. After having saved a certain number of truncated documents (because of bugs due the complexity of the code), and after spending some week-end fixing them, i decided to give the utilities to the community.

At this point started a long effort to cleanup and document the code.

Design goals

The design goals of io-tools are:

  • Take only what you need. The project is divided in two sub-projects: Easystream and WazFormat so that you can choose only the parts you need. One of the most important aspects was that Easystream has a reduced set of dependencies, it tries to keep the number of libraries required to compile your project at minimum.
  • Simple API : The programming interface had to be designed as simple as possible, trying to hide the tedious low level operations (such as thread allocations) firstly for the sake of easier understanding and usage, secondly in order to avoid needless complexity.