Project

General

Profile

Home » History » Version 88

Greg Burri, 12/14/2008 03:01 AM

1 1 Greg Burri
h1. Home
2
3 64 Greg Burri
* [[Development process]]
4 76 Greg Burri
* [[Links]]
5 64 Greg Burri
6 31 Greg Burri
h2. Brainstorming
7 4 Greg Burri
8 21 Greg Burri
* Core and GUI are independent. They communicate over TCP socket.
9 68 Greg Burri
** It's possible to launch the core without the GUI and without X launched under Linux.
10 87 Greg Burri
** The core show, if it's possible, an icon in the trayicon with a minimal menu to manage it. The menu will include an entry to stop the core and an entry to launch the GUI.
11 68 Greg Burri
** The core does not depend of any kind of graphic library except for the trayicon.
12 1 Greg Burri
** If the GUI crashes then the core remains.
13 68 Greg Burri
** It's possible to control the core remotely with a password.
14 22 Greg Burri
* Designed for LAN usage (full trusted peers and very high speed transfers).
15 37 Greg Burri
* Efficient (very low CPU usage).
16 18 Greg Burri
* Distributed download (multi peer downloading and no central server).
17 80 Greg Burri
** Quicker peer first. The speed of a peer is an average over a period of time say 5 min, it's computed by the downloader. The speed of an unknown peer is maximum thus it will be take first. If a downloading is too slow (like three time slower than the best known peer) then it can switch to a quicker free peer.
18 65 Greg Burri
After A period of time without any download from a peer say 30min its speed is reseted to the maximum.
19 87 Greg Burri
** Then rarest parts first from the chosen peers. If there is no rarest parts then the choice is randomly.
20 79 Greg Burri
** A part can be resumed from any peer which own a complete copy of this part.
21 37 Greg Burri
** A file from a user is identified by its name and its folder.
22 1 Greg Burri
** Fixed part size (2^24 B = 16 MB) hashed with SHA-1. Used to control the integrity of parts and to identify each part. If the SHA-1 of a part does not match the given SHA-1 then it will be re-downloaded entirely.
23 81 Greg Burri
** The number of concurrent download is around 3 parts simultaneous but not more than 1 per remote peer. The number of concurrent upload is unlimited.
24 43 Greg Burri
** Recursive folder downloading.
25
** The paths of the files are recreated in the downloading peer.
26 40 Greg Burri
* There is a general chat. There is no private chat. The chat uses UDP multicast (if possible).
27 79 Greg Burri
* Multicast UDP for services discovering (maybe UPNP). Each peer announces periodically (T) is alive with a multicast message. If we doesn't receive any alive message from a peer while 3*T we consider it dead and we remove it from the list.
28 87 Greg Burri
* Tabbed MDI GUI with GTK2HS. See [[GUI]] for a preview.
29 1 Greg Burri
** A panel to view the current peers and their amount of sharing.
30 81 Greg Burri
** A window to view the current downloads (leechage) and one for the current uploads (seedage). These windows are very similar. The list is ordered, first the complete downloads then the incomplete ones with 0 peers then the current downloading files and finally the queued files and folders.
31
The list can contains both file or folder, when a folder is downloaded its files and folders are retrieved from the peer and will replace the folder in the list (lazy download).
32
There is a limit of the number of complete download. 500 for example.
33 40 Greg Burri
** A window for the chat.
34 57 Greg Burri
** Some windows for each file browsing. The files and folders are seen like a tree (like in the Finder of Mac OS X).
35 81 Greg Burri
** Some windows for each file searching.
36 78 Greg Burri
** A window for the settings.
37 18 Greg Burri
*** The shared folders.
38 1 Greg Burri
*** The incoming folders (take the first if enough available space disk otherwise the second and so one..).
39 87 Greg Burri
*** Bandwidth and CPU limitation with a single option (checkbox). If activated then downloading, uploading and hashing rates will be reduced.
40
* The files that are currently downloaded have the final size with a name like "movie.mkv.unfinished". The ".unfinished" will be removed when the download is finished. Maybe do the same thing for folder.
41 83 Greg Burri
* Using of "Thrift":http://incubator.apache.org/thrift/ or "Protocol Buffers":http://code.google.com/apis/protocolbuffers/docs/overview.html for definition of the protocol between the peers and between the Core and the GUI.
42 1 Greg Burri
* File list with name+size.
43 73 Greg Burri
* Non blocking search, the list is dynamically filled for each peer answer. The search is active on files and folders name.
44 1 Greg Burri
* Using of systray (optional).
45 71 Greg Burri
* When you browse the files of someone you will see all its files with non-hashing files too.
46
** The hashing will be created and sent when you decide to download a specific file.
47
* Support of UTF-8.
48 66 Greg Burri
** Creating many tests with special characters in the name of the files or directories
49
** Maybe use of 'Distribution.Simple.Utils.toUTF8'
50 61 Greg Burri
* "Haskell":http://www.haskell.org language
51
** A polymorphically statically typed, lazy, purely functional language. Very high level modern language.
52 88 Greg Burri
** Garbage collected.
53 1 Greg Burri
** Open source.
54 88 Greg Burri
** Efficient, native code compilation.
55
** Can be use as script with a on fly interpretation. For configure/build scripts for example.
56 61 Greg Burri
** Good GTK-Binding : http://www.haskell.org/gtk2hs/
57 1 Greg Burri
58
h3. Secondary ideas
59
60 85 Greg Burri
Theses ideas will certainly not be implemented for the first release.
61
62 72 Greg Burri
* The users can add some comments or tags associated to theirs sharing. These comments or tags are displayed in the list of peers (new column ? tooltip ?).
63 82 Greg Burri
* Search in meta data like ID3tag and in compressed file (zip, etc.).
64 1 Greg Burri
* Free space management.
65 75 Greg Burri
* Preview of video and mp3 files from a peer. Streaming ?
66 84 Greg Burri
* Virtual folder to aggregate some real folders. For example the virtual folder 'Divx' may merge '/mnt/Divx1', '/mnt/Divx2' and '/home/paul/movies'.
67 1 Greg Burri
* Private chat.
68 70 Greg Burri
* Multi languages.
69 1 Greg Burri
* Automatically detect a running game and set the limitation flag.
70
* Automatically detect CPU/bandwidth usage and set limitation flag.
71
* Protect some sharing by a password / user rights for shares.
72
* Statistics window with graphs.
73 60 Greg Burri
74
h2. Functional
75
76 1 Greg Burri
* [[Name]]
77 88 Greg Burri
* [[Logo]]
78 60 Greg Burri
* [[Functional constraints]]
79
* [[GUI]]
80
81
h2. Technical
82
83
* [[Study of the BitTorrent protocol]]
84
* [[Study of UPNP]]
85
* [[Study of UDP multicast]]
86
* [[Study of Thrift]]
87
* [[Study of Protocol Buffer]]
88 63 Greg Burri
* [[Libraries]]
89 60 Greg Burri
* [[Protocols]]
90
* [[Prototypes]]
91
* [[Guidelines]]