From Fedora Project Wiki

< GSOC 2014

Revision as of 16:38, 21 March 2014 by Mrchapov (talk | contribs) (added proposal details)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Contact Information

  • Email Address: mrchapov@gmail.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?

No.

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.

Proposal Description

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.

After that I started working in Aomeda. In this company I spent 7 years. The company was specialized in developing web-based systems and custom software. There I worked on many projects in both the web and the software divisions and perfected my skills. My field of expertise includes: C/C++, Python, JavaScript, cross-compilation, network programming. I have experience with multiple libraries and APIs.

The company I am currently working in is called Filement. Its focus is developing a universal system for managing user content located on devices running on different platforms and cloud services. Here I am part of the core development team working on both the backend and the frontend of the system. The backend is based on pure C software, entirely developed by our team. It includes custom web server. Its main goal is to serve content to the interface. Also the system includes a forwarding (proxy) server whose goal is to forward the connections between the web servers and the web based interface when direct connectivity is not available. It is built with performance and scalability in mind. We are using event-based mechanism with epoll and POSIX threads without any locks. I also help in the development of the web interface where we use JavaScript, HTML, Python (for template generation). Working in this company is really valuable because basically we are developing a custom system which did not exist before us and we are facing unique challenges.

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.