<div dir="ltr"><div><br></div><div>Hello KDE devs and GSoC mentors,</div><div><br></div><div>I know its kind of last moment for GSoC ideas but I have had this one for quite some time in my mind and I would like to give it a shot. Since the deadline is approaching fast I will try to get to my point as quickly as possible so that you don't have to read much. I am sending this to devel and connect mailing lists with the hope of catching the interest of a mentor. If you are a mentor relevant to this area, please respond to my idea, even if you find it unacceptable. I would like to get all kind of feedback before submitting the formal proposal at GSoC. Thanks in advance :)</div>
<div><br></div><div><b>What problem am I trying to solve</b></div><div>Technology and how it is used has changed dramatically during the last 10 years. There are more people online in the internet, using a miltitude of heterogenous devices. Our wish, btw, is to see KDE everywhere. One of the problems that myself as well as my friends face is dealing with configuring multiple desktop systems we own in a consistent manner. I myself have two laptops and a desktop (in college) with KDE installed. I believe the case is not very different for most of you out there. Often whenever I make a change in one of these desktops, I have to go around on all the other systems to make the same changes myself.</div>
<div><br></div><div>Consider a simple example. When I add a new feed to akregator, I need to ensure that I add the same in all my systems. Or take the case of adding a new bookmark to rekonq or konqueror. Consider the case when I changed a keyboard shortcut and having to make the same changes in all other systems. Wouldn't it be a lot simple if all the configuration changes get synchronized automagically over internet?</div>
<div><br></div><div>Now consider the case where you plan to reinstall your OS. Or, change the distro from Kubuntu to Arch. Or maybe you just want to use a desktop at your in-laws for making an urgent fix to your project source code. Wouldn't it be a lot nicer if you could just login and synchronize your KDE session to get the same look and feel of your own system. This project aims to provide a seamless and consistent experience for any KDE user across many desktop installations.</div>
<div><br></div><div><b>Project Description</b></div><div>The project aims at providing a transparent mechanism for storing application configuration data in a cloud service with little or no modification to the existing KConfig module. The idea is to let a KDE user connect his/her KDE sessions (on multiple devices) to a cloud service using his/her <a href="http://identity.kde.org">identity.kde.org</a> (or similar) credentials. Once the session is authenticated with <a href="http://identity.kde.org">identity.kde.org</a>, user could configure the applications to be synced for storing their configuration data. A separate KDE service running in the background takes care of synchronization and any possible conflict resolution. A separate user interface would be used for manual conflict resolution. All configuration changes will be done through a kcm module. Service control and status monitoring would be shown using a system tray application.</div>
<div><br></div><div>When an application uses KConfig module to store its configuration, the configuration is stored in local filesystem first. It's then scheduled to be updated to the cloud by the backend service at the earliest - we could use the Linux inotify interface or equivalent to monitor for changes in filesystem. Once updated in the cloud, the data is synchronized across all the desktop sessions using the same identity credentials both currently or any time in future.</div>
<div><br></div><div>My current knowledge in KConfig is based on the tutorial given here: <a href="http://techbase.kde.org/Development/Tutorials/KConfig">http://techbase.kde.org/Development/Tutorials/KConfig</a>. I understand that there are multitude of ways an application might prefer to store its configuration data and it's my intention to take the most common apps on a case-by-case basis to provide the cloud support. I would currently like to target the following applications:</div>
<div><br></div><div>  a. akregator (for synchronizing feeds)</div><div>  b. rekonq (for bookmarks)</div><div><br></div><div>Since this is a major feature, we should probably target KDE Framework 5.</div><div><br></div><div>
<b>Technologies & Tools</b></div><div>I prefer to use C++/Qt5/KF5 for all the modules except the server side. Server side could use PHP or Ruby. I'm not sure what runs behind the KDE servers currently, guessing it's PHP. I am familiar with HTML/Javascript but not an expert - so that might be an area where additional help will be required.</div>
<div><br></div><div><b>Deliverables & Timelines</b></div><div>I believe the project will have five deliverables:</div><div>  a. Have a cloud service running on a <a href="http://kde.org">kde.org</a> server (4 weeks)</div>
<div>  b. A KDE backend service that takes care of synchronization of configuration data (5 weeks)</div><div>  c. A kcm module to configure the service (1 week)</div><div>  d. A simple UI for manual conflict resolution (2 weeks)</div>
<div>  e. A simple system tray application for quick control and status monitoring of the synchronization process (1 week)</div><div><br></div><div><b>Concerns</b></div><div>Following are some concerns that some people have shown about the project:</div>
<div>1. Security and Privacy: As I understand, Privacy and Security are one of the main concerns with cloud storage. A few possible solutions to those concerns are:</div><div>  a. Use a HTTPS to protect communication between client and server</div>
<div>  b. Enable user to use an encryption key for data stored on the server</div><div>  c. Use a decentralized storage (like bittorrent) where the server acts more like a tracker</div><div>2. Storage Capacity and Reliability: I understand that providing storage for millions of KDE users in a KDE server might be too much of overhead as we all risk. One of the ways to avoid this is to let the user configure a Dropbox or Google Drive or similar service for storage of data. In fact, the user could even integrate with an OwnCloud service for data storage.</div>
<div><br></div><div><b>About Myself</b></div><div>I have been a KDE user for more than 13 years and currently pursuing M.S. in Computer Science at Syracuse University. I have about 7 years of experience in working in software industry developing system software for Linux using C and C++. Apart from C and C++, I am also very good in Bash, Ruby and Python and my interest is in reliable, open, secure and distributed systems. I intend to work on this project during the entire summer from second week of May till first week of August (a total of and would like to spend a minimum of 45 hours per week. I work in New York timezone and am happy with IRCs and emails for communications.</div>
<div><br></div><div>Thanks</div><div>Jinesh</div><div><br></div></div>