Monday, March 30, 2009

Multiple improvements in KGet

* This is another GSoC related post, normal users please ignore it.





Abstract
========
KGet is a versatile and user-friendly download manager for KDE.
This project will add various features to KGet to improve its functionality and
usability. These include semantic information via Nepomuk, support for digital
signatures, better Metalink integration and good Plasma support.

Personal details
================

Name: Nikhil Marathe

Email Address: nsm.nikhil@gmail.com

Freenode IRC Nick: nsm

Location (City, Country and/or Time Zone): Mumbai, India ( GMT + 5:30 )



Proposal Name
==============
Making downloading easier, safer, better - multiple improvements to Kget

Motivation for Proposal / Goal
==============================
Kget is a very good download manager, with a crisp interface and nice
integration into KDE. At the same time there is always room for improvements. These include quick renaming of partial downloads, support for
verification of downloaded files and ability to download from multiple sources.
I will attempt to add these improvements.

Goals
-----
As specified in the proposal:
* Add support for a context menu to alter download properties.
* Allow manual addition of URLs to multithreaded downloads.
* Integration of downloads from multiple sources - Bittorrent/HTTP/FTP.
* Integrate KGpg to verify digital signatures.
* Integrate Nepomuk support if available.
* Metalink creation support.
* Support to download an MD5SUMS file from servers if available and verify
downloads. Manual intervention possible if the MD5SUMS is not found.
* In case of a Metalink, attempt to verify PGP checksums using KGpg.

In addition I have the following features I would like to implement:
* Add Plasma applet drop target which can be added to panel - KGet's current drop target tends to cover up screen content. Tucking it away in
the panel seems a good workaround.
* Allow KGet to display transfer details in the system tray tooltip - this
feature ( seen in ktorrent ) is very useful.
* Allow KGet to restart on crashes - it is very annoying to find that the download you left on and went for lunch didn't finish because KGet crashed and didn't restart. This should fix it.

Apart from the motivation of improving KDE, I have a somewhat selfish motivation
for improving KGet since it seems to be the only download manager that can
resume partial files on my computer :)

Implementation Details
======================

NOTE: Wherever UI changes are required, they will be made to the web interface too in case required.

My current implementation plan includes:
* Modify KGet UI for context menu. This also involves adding the appropriate HTML/Javascript/CSS to support the same through the web interface.
* Add KIO operations for moving/copying files when download location is changed
to the KGet core.
* Add support to verify signatures using KGpg command line options ( as KGpg
does not seem to have a D-BUS interface. )
* Add dialog for creation of Metalinks from downloaded files, or local
filesystem files, including automatic MD5 and PGP checksumming.
* Submit data to Nepomuk about download location, download server.
* Allow user to add tags/rating to download while it is going on.
* Discreet option to add multiple download links for non-Metalink downloads.
* For MD5SUMS verification, attempt to guess multiple types of filenames (
MD5SUMS, md5sums.txt etc. ) or allow the user to enter link or checksum
manually.
* Implement plasma drop target which should also have settings for the
following -
Prompt for download by raising KGet window or just downloading to a default location and not breaking the user's workflow.
* Provide a setEmergencySaveFunction and crashHandler so that we can attempt to rescue files from corruption and restart KGet when it crashes.

Tentative Timeline
==================

now - May 23rd : Understand relevant KGet code. Take a look at how to hook into
Nepomuk. Plan the UI and backend design.

May 23rd - June end: Attempt to implement the core functionality of manual URL
insertion, renaming and moving, and integration of multiple download methods.
Integrate KGpg and Nepomuk. Add Metalink PGP verification.
Write plasma drop target applet. Implement tooltip functionality.

July : Implement Rating and Tagging support. Add configuration options.
Implement MD5SUMS verification. Fix bugs, write documentation.

August 1-10th: Fix remaining bugs, wrap loose ends, test test test.

More personal details
=====================
Do you have other obligations from late May to early August (school, work,
etc.)?:

My 3rd semester begins in the last week of July, which means I'll have
a bit less time ( around 25 hours a week ) towards the last two weeks of coding.
Therefore I will attempt to finish almost all
of my proposal by the end of July.

About Me
========

I'm 18 years old. I study in Gandhinagar, India. I'm pursuing
a B. Tech. in Information and Communication Technology at DA-IICT where I'm in
the first year.

I've been programming and using Linux for about 6 years now. I'm fascinated by
all the areas of computing, including compilers, operating systems, graphics and
web design+development. Python is the coolest language for me, although C/++
comes pretty close. I have significant experience in Qt ( including the new MVC
architecture ) - having developed a local network instant messaging client using
it. I am also familiar with the HTTP and FTP protocols and have used PGP
encryption/signing to some extent. In addition I have a decent web development experience, including Ajax and JS effects, which are required for the KGet web interface.

A complete list of my projects can be found at
http://22bits.exofire.net/browse/code

KDE has been a really great piece of software for me ever since I first used
version 3.2. I've always been a fan of its configurability and the momentum and
innovation in the KDE community, and KDE 4 totally took it to the next level. It
has been a kind of
dream to work on KDE someday. Unfortunately I could never participate in GSoC
due to age restrictions. I also didn't have the experience to enter such a huge
project until last year, but now I'm ready to become a full time contributor to
KDE. I have recently patched bug 164137 (
https://bugs.kde.org/show_bug.cgi?id=164137 ) in KWin to remove a redundant
checkbox, which is currently awaiting feedback from KWin developers.

When not in front of the computer I also love playing football, reading and
listening to music.

Tuesday, March 24, 2009

Proposal for Tiling support in KWin

*Note to my normal blog readers, this post may not be of interest to you

Abstract:
This project will add a tiling layout mode to KWin. Tiling window managers displays all windows on the desktop at once, side by side. This allows easy navigation and allows tasks shared across applications to be carried out effortlessly. Unfortunately it is usually presented as a power user option. This will be an attempt to make it more accessible to new users.

Name: Nikhil Marathe



Email Address: nsm.nikhil@gmail.com



Freenode IRC Nick: nsm



Location (City, Country and/or Time Zone): Mumbai, India ( GMT + 5:30 )



Proposal Name:
Implement support for tiling in KWin



Motivation for Proposal / Goal:

Tiling is a very good way to view multiple tasks/windows together. This is well
suited for tasks like writing reports where you can keep looking at references, or watching multiple pictures/videos and even programming. Fast window
switching via the keyboard also improves productivity and decreases needless
Alt+Tabbing. Although tiling window managers have existed for a long time, KWin
does not have this feature. It has been requested for a long time now too ( https://bugs.kde.org/show_bug.cgi?id=59338 ), and
will be useful for those who want to use KDE yet still want a tiling WM.
In addition tiling WMs have always tried to appeal to power users, leaving a gap for the new user to jump. They eschew the mouse and more often the configurability, while available in abundance, often requires scripting. My belief is that the tiling mode should be an intuitive and friendly user experience and should be offered to the new user as a must-have feature.

Goals:
* Provide an intuitive tiling mode, with different layouts ( like Awesome ) and
support for certain floating windows.
* Expose a D-BUS API for tiling so other applications, including Plasma can hook into it.
* Use compositing and the mouse wherever possible for a fluid experience.
* A feature where windows dragged to the edges will automatically resize themselves to half the screen size as suggested here http://lists.kde.org/?l=kwin&m=122749581132588&w=2 . Of course this could be extended and made more powerful.
* Marking/Selection - Move/tile only certain windows.
* Tiling Stacks - An entire set of
windows could be pushed back, brought in front or moved, each preserving there tiled layout. This could easily be extended to work across multiple monitors.
* Another UI feature that I would like to bring in from 'Present Windows'. The user should be able to select windows by typing a certain filter for the window titles. So a search for Dolphin followed by a keystroke would only tile dolphin instances, leaving xchat floating in the centre.

Implementation Details:

My goal would be to implement a complete tiling solution for KWin. This would
involve:

* Communicate with KWin team and community feedback, along with some help from the KDE Usability team to decide how best it can be made user friendly.

* Add tiling code to the core, including new Placement modes, support for Stacks, session management and screen edge gestures. ( Currently when a window is being moved, edge gestures are still passed on to KWin which rotates the desktop or something else. I'd like to intercept these if the user says so to enable tiling )

* Tiling architecture would be somewhat based on Awesome. Awesome is well engineered and well commented, and some of its principles can be adopted into KWin's tiling mode.

* Ensure tiling plays well with layout commands like Cascade or Unclutter or Present Windows.

* Add marking/selection and relevant key bindings.
Marking would be light weight, relevant only for the current window motion, while a Stack would be more permanent. This would use something like the resize geometry display box or if compositing is enabled, tinting or some similar effect.

* Add D-BUS API.
* Is tiling enabled?
* Available layouts, current layout.
* Switching layouts
* Stack awareness.

* Add configuration options for movement, shortcuts to layouts.
This would be intuitive. The shortcuts would only be active in tiling mode and not clash with application shortcuts. For example. in a multimedia keyboard Next would go to next track in Amarok, but Meta + Next would go to next layout or next stack.
Mouse (especially the scroll wheel) would be used extensively to do almost anything the keyboard can.

* Implement panel applet and plasma grouping by editing relevant taskbar code and leveraging the D-BUS API.

* Allow certain windows/applications to preserve their tiling by using KWin's Special Window/Application settings.

* Write user documentation, fix up bugs.

Tentative Timeline:

now - May 23rd : Understand relevant KWin code. Use KWin less, use a tiling WM more. Read KDE documentation, interact with the mentor and
community. Investigate entry points into code. Design the project and plan how the user interface should behave in
tiling mode.


May 23rd - June end: Attempt to implement the core completely. This includes the main tiling
components, the D-BUS API, working well with Plasma and so on. This will include
testing and bug squashing. Have a working tiling mode by the evaluation period.

July : Implement configuration dialogs/options, write user documentation, make the UI
sensible. Implement non critical features such as compositing support, bells and whistles.

August 1-10th: Fix remaining bugs, wrap loose ends, test test test.

Do you have other obligations from late May to early August (school, work,
etc.)?:

My 3rd semester begins in the last week of July, which means I'll have
a bit less time ( around 25 hours a week ) towards the last two weeks of coding. Therefore I will attempt to finish almost all
of my proposal by the end of July.

About Me (let us know who you are!):

I'm 18 years old. I study in Gandhinagar, India. I'm pursuing
a B. Tech. in Information and Communication Technology at DA-IICT where I'm in
the first year.

I've been programming and using Linux for about 6 years now. I'm fascinated by
all the areas of computing, including compilers, operating systems, graphics and
web design+development. Python is the coolest language for me, although C/++

comes pretty close. I have significant experience in Qt ( including the new MVC
architecture ) - having developed a local network instant messaging client using
it.

A complete list of my projects can be found at
http://22bits.exofire.net/browse/code

KDE has been a really great piece of software for me ever since I first used
version 3.2. I've always been a fan of its configurability and the momentum and
innovation in the KDE community, and KDE 4 totally took it to the next level.
Okular and Amarok are the killer applications for me. It has been a kind of
dream to work on KDE someday. Unfortunately I could never participate in GSoC due to age restrictions. I also didn't have the experience to enter such a huge project until last year, but now I'm ready to become a full time contributor to KDE.

When not in front of the computer I also love playing football ( soccer ).
Otherwise I can be found reading or listening to music.