Beginning to Advanced
Factor has an HTTP client library, an FTP client library, first class pathname objects, and lots of code to handle pathnames on different platforms. The student will need to see if there are pathnames the existing code cannot handle, such as Windows URI and UNC pathnames.
Implement an extandable Virtual File System, so that a consistent API can be used to access local files, HTTP resources, files on FTP servers, and so on. The most promising way to come up with a good API in Factor is to attempt certain tasks and write high-level words which accomplish those tasks. After factoring the code to avoid duplication while solving all the tasks, the API falls out for free.
Integrating FTP support with the current pathname code should not be too hard. There are words to download a remote FTP file to a certain location on the local disk, but they are not integrated with the current dispatching code.
Since the essence of this project is accessing files from addresses specified in various protocols, the project involves making sure all permutations of downloading/uploading, copying, moving, files works for whichever protocols it makes sense. The student will write unit tests to ensure that these operations have a high probability of continuing to work in the future.
The student could add support for more protocols such as NFS, Apple's AFP, SMB or Samba, or WebDav as time permits.
Benefit to the student
The student will learn about integrating libraries and writing APIs in Factor.
Benefit to the community
Being able to programatically download a file from a remote computer, HTTP or FTP server is useful for configuring and updating applications. Tools which do this, such as package managers and backup utilities can be written on top of this layer. Furthermore, a file browser can be built on top of this library once completed.
This revision created on Fri, 13 Mar 2009 23:52:50 by erg
All content is © 2008-2010 by its respective authors. By adding content to this wiki, you agree to release it under the BSD license.