> implementation | features
:: design goals
In drafting an architecture for the memiki network, its designers considered the following criteria:
- Functionality - The memiki daemon and its front-ends should present all the features of a modern p2p network.
- Performance - Both in searching and downloading, the system should give priority to fast response. A user should receive results to queries as quickly as possible, and downloads should be smart enough to retrieve files in chunks, from multiple sources and with an eye for connecting to hosts with the fewest hops in between.
- Scalability - The network should not slow down as the number of nodes increases. It should be able to automatically break apart into sub-networks, all or which remain connected together, allowing each subnet to be managed separately.
- Usability - The front-end should be simple to use. The interaction a user has with a p2p network consists of searching and downloading. Both of these processes are relatively straightforward and should not be complicated by the software with obscure parameters or confusing technicalities. Whenever decisions need to be made about the methods to use for either process, the software should make the most intelligent choice possible, without cluttering the user interface with options.
- Portability - The system should be developed in an environment that is easily portable, allowing the software to quickly migrate to popular platforms as they become available.
- Extensibility - Internally, the system should be modular and open, allowing developers to quickly understand and extend its structure.
- Vulnerability - The network should be resistant to tampering by hostile parties. It should be difficult or impossible to shut it down, requiring that all nodes be physically reachable in order to accomplish this.
- Anonymity - When interacting with the network, the memiki daemon should protect the identity of its user, obscuring in whatever way possible any trace or evidence that might point to the transaction and/or the location of the user. This requirement also aids greatly in making the network invulnerable.
:: initial implementation
Our first pass at the servent daemon was accomplished in Linux, and is now complete and ready for download. For CVS access, see our SoureForge page.
Development language -
For the sake of shortest possible development cycle, and for reasons of portability, we have made Perl the language of choice, Other languages considered included C++ and Java but due to a vibrant Perl user community, and Perl's interpretive nature, which fits well with our open-source philosophy, the selection was clear and simple.
Daemon structure -
The memiki servent is structured as a state machine, using the POE engine. This choice of architecture and the brilliance of the POE mechanisms have allowed us to leverage a tremendous amount of others' work in the way of drop-in components.
Daemon interfaces -
Communications with the memiki servent occur over two protocols: HTTP and IRC. Queries are issued in standard formats, and results come back in plain-text files containing url-encoded data.
Network architecture -
To communicate queries and resolve their resulting sources, memiki uses the Internet Relay Chat networks. This medium is ideally suited to the question-answer paradigm and thus makes an excellent carrier for memiki.
To retrieve the results, memiki uses standard HTTP calls, made directly, or through an anonymizer, to the box containing the results.
Developing front-ends -
At present, the only front-end available is web-based. Our choice of using web technologies for our first client owes to the web's flexibility as it means that any machine with a browser is capable of connecting to and utilising the memiki daemon.
Application skins -
To make the interface more exciting, the web-based front-end makes use of cascading style-sheets (CSS), allowing graphics designers to create new skins.
:: system features
- Auto-evolution (up2date)
- Shortest-distance algorithm
- Complete-collection downloads
- Swarming (multi-source downloads)
- Metadata retrievals (album covers, lyrics, etc.)
- Lyrics searches
- Migration capabilities
- Complete documentation
- Active indexer for shared directories
- Transfer progress bars
- Multiple shared directories
- Comprehensive statistical reporting
- Fully optimized code