GSOC 2014/Student Application Mrchapov
- Your name: Anton Chapov
- FAS Account: mrchapov
- Fedora userpage: https://fedoraproject.org/wiki/User:Mrchapov
- Email Address: email@example.com
- Blog URL: (soon)
- Freenode IRC Nick: mrchapov
NOTE: We require all students to blog about the progress of their project. You are strongly encouraged to register on the Freenode network and participate in our IRC channels. For more information and other instructions contact Org Admins.
please answer following questions
Why do you want to work with the Fedora Project?
I am a regular fedora user and I like fedora very much. So I want to contribute to it.
Do you have any past involvement with the Fedora project or any other open source project as a contributor?
No, but I would like to.
Did you participate with the past GSoC programs, if so which years, which organizations?
Will you continue contributing/ supporting the Fedora project after the GSoC 2014 program, if yes, which team(s), you are interested with?
Yes. My plans are to continue contributing fedora.
Why should we choose you over other applicants?
I have a lot of experience as a programmer and I think I can do a pretty good job for Fedora.
An overview of your proposal
I would like to implement the Afterthought project. Afterthought will be the tool to run (not predefined) jobs on *nix systems. At very high level, it will take an URI as argument, fetch the data of the URI, strip/parse the formatted data (with instruction sets) & execute the commands/jobs. This makes automating tasks, server/application deployments so much easy.
The need you believe it fulfills
Less RTFM, less maintenance (or chasing ghost of the past routines/scripts), more automation - wherever applies (hint: applies in way too many places).
Any relevant experience you have
Currently I'm studying my Bachelors degree in Computer Chemistry - Sofia University, Bulgaria.
My total programming experience is more than 13 years. Over the past 10 years I have been working in different companies on very different projects which helped me to master my programming skills. The first company I worked in was InterSoftPro. There I was working on a Java based CRM platform specially developed for custom integration in companies. I spent about an year working in this company.
Other than programming, my fields of interest and experience include virtualization (XEN, KVM, UserModeLinux), cloud technologies, encryption and security, network and system administration, and lately mobile platforms (Windows, Android, BlackBerry and iOS) development.
How you intend to implement your proposal
I plan on using C as I have a lot of experience with it and it gives the programmer finer control. Data fetching can be accomplished with simple HTTP GET request. This has the additional benefit that HEAD request can be used to quickly check for changes. System-specific data can be passed as HTTP headers. For testing purposes I will use node.js on the server side because I am already familiar with it.
I will create a configuration file for the tool. This file will describe the settings for security, caching, temporary directories, network parameters (like retry count), etc.
There are many measures that can ensure security (settings can be modified in the configuration file):
- Allow only TLS connections (https).
- Trusted servers whitelist.
- Calculate the checksum of the downloaded file and compare it with the expected checksum. I think SHA-256 is a good checksum algorithm for this task.
- Executing the script in a chroot environment.
- Executing the script with an unprivileged user.
- Whitelist/blacklist of allowed commands.
A rough timeline for your progress
The project can be divided in to a several tasks:
- (week 1,2) designing request and response format (query parameters, headers, etc.)
- (week 3) parsing command-line input
- (weeks 4,5) detecting system-specific information (operating system, distribution, platform, software version, etc.)
- (weeks 6,7) generating and sending HTTP request
- (weeks 8,9) receiving and parsing the HTTP response
- (week 10) script execution
- (weeks 11,12) testing, documentation
Any other details you feel we should consider
I will do constant testing to make sure everything works properly. I will also write documentation in the form of a manual page. In additon, some caching mechanism can be implemented to speed the application up in case the same script needs to be executed multiple times. This can be done by storing the fetched scripts along with fetch URL and fetch time in some directory.
Have you communicated with a potential mentor? If so, who?
No, at the last moment I realized that I will be free for the summer, so I didn't have enough time firstly to discuss with the mentor, but I hope to be not too late.