Issue 22
3rd September 2006 by Danny AllenThis Week...
A second important issue was the data verification which never worked reliably due to charset conversion problems that I was not able to work around properly. Now I rewrote that one also letting K3b compare complete image checksums instead of comparing every single file. The advantages of this approach are the faster verification process and that it just works. The downside is that you don't know which files were not properly written in case verification fails. Well, maybe I can get to that for K3b 2.0. ;)
Anyway, K3b 1.0 is on its way and I am quite proud of what I accomplished so far. Sure, I still have a huge TODO list and big ideas for the future but that will always be the case. For now, the features K3b 1.0 will provide are a very good base.
Ok, I already mentioned it: K3b 2.0. What are my plans? For now there are two main topics: the complete redesign of the underlying K3b library including K3b's own CD/DVD image format (which is already working BTW) and Video DVD creation. For now there is an excellent wizard like tool for this but I always wanted to have Video DVD creation in K3b. But getting it right takes a lot of work. That's why it has been postponed to K3b 2.0.
Currently I am working on fixing bugs. As you may know, bugs.kde.org still contains hundreds of bugs related to K3b, most of which can simply be closed due to duplication or because they are already fixed or outdated. But I would love to get the list cleared for K3b 1.0 (hint, hint: help me!).
So I started. At the beginning, I didn't know much about what I was going to do, but aided by Bart Coppens and all the other Krita/KOffice developers, I quickly got on track :)
The project consisted of 3 parts: a Framework, and two Tools. The Framework provides developers with the ability to quickly develop a tool that draws or selects "curves", that is, lists of points. It gives you the possibility to define "manageable" curves, that have control points for handling. Changing just a line, a tool can either draw a curve or select an area out of it. It is based on the idea of a function, calculateCurve, that converts the data that the user gives to Krita into a list of points, that then can be easily drawn with standard (still virtual if you want to change them) functions.
The second step was applying this framework to a "Bézier Curve Tool". Bézier are "smooth" curves obtained with a parametric function of up to four points. They are used to paint fonts, car design, and whatever else you want to be "smooth". I developed it relatively quickly, and it's split into a "Bézier Drawing Tool" and a "Bézier Selection Tool", just to let you draw/select bézier areas.
Third and last step was the most exciting one: develop the "Intelligent Scissors". This tool is like "Select Shapes" in the GIMP and "Magnetic Lasso" in Photoshop and combines the best features of the two. It uses 3 algorithms to get the work done: edge detection, non-maximum suppression to obtain a thin line out of the previous algorithm, and then A* algorithm to find the optimal path through the calculated edges.
But the "magic" of this tool comes now: it follows your mouse while you are moving it, so it selects the edges that *you* follow. This way, it can be fast (because it automatically adds other "control points" when your mouse is too distant from the last control point added) and at the same time it is very precise, because you see the edge it has found and you can, if you want, correct it. This behaviour has been taken from Photoshop.
I've taken a behaviour from the GIMP too: you can modify the curve before making the final selection. So, while you use the tool, if you see that a section of the curve is wrong, you can hit the "Ctrl" key to switch to "Manual Mode": the tool stops following the mouse and lets you manually select, delete, add (in the middle of the curve too) control points. Then you hit "Ctrl" again, return to "Automatic Mode" and after a single click the tool starts to follow your mouse again. Easy, isn't it?
Some screenshots:Luckly I finished the tool right around the 21th August deadline, so it's all OK for Summer Of Code :) The two months of development gave me the opportunity to enter the world of Open Source: I'm now amazed with how fast and good KOffice 2.0 is developing, so I'd like to participate in the development of the Flake graphical object library very much, but also on other parts of Krita, KOffice or even KDE! But I like also other open source projects, so, perhaps, I could participate as documenter/developer/patcher for them too :) It's an amazing world and I think that its fast growth will bring great advantages to all.
Compiling has been reported to be a bit difficult for some people, although the #kat IRC channel has people that can help. Also inotify support is a bit whimsical at the moment so that's best disabled until better scrutinized. But why let that get you down, it's no worse then setting up dbus in the first place :-)
Hail to all scripters out there: a call for imaginative queries!
So, what kind of queries are possible?
Examples include:
- give me all mp3 files in my home directory
- all emails that have "commit-digest" in them
About 150 bugs were dealt with kung-fu style, with the running count now past 250. To visualise the magnificance of this achievement, see this graph (with the sharp fall at the end).
To push this momentum into a continuous downward trend, a new IRC channel, #kde-bugs, has been created where people interested in bug triage can discuss the process. Just like writing documentation, bug triage is an ideal way for less-technically inclined people to contribute positively to KDE. Every weekend from now should see a bug effort targeting a different area of KDE. Beginners are welcome, so join #kde-bugs today to participate!
Statistics
Commits | 2687 by 212 developers, 5807 lines modified, 1216 new files |
Open Bugs | 12945 |
Open Wishes | 11492 |
Bugs Opened | 333 in the last 7 days |
Bugs Closed | 476 in the last 7 days |
Commit Summary
Module | Commits |
/trunk/KDE |
620
|
/trunk/www |
347
|
/branches/stable |
314
|
/trunk/l10n |
302
|
/trunk/extragear |
301
|
/trunk/playground |
213
|
/branches/work |
175
|
/branches/KDE |
138
|
/trunk/koffice |
83
|
/branches/koffice |
78
|
Lines | Developer | Commits |
320
|
Hamish Rodda |
81
|
204
|
Laurent Montel |
78
|
169
|
Stephan Kulow |
77
|
135
|
Dirk Mueller |
63
|
89
|
Gilles Caulier |
49
|
123
|
Eike Hein |
44
|
91
|
David Faure |
42
|
47
|
Jos van den Oever |
39
|
86
|
Sebastian Kügler |
36
|
70
|
Marcus Furlong |
35
|
Internationalization (i18n) Status
Language | Percentage Complete |
Portuguese (pt) |
100%
|
Swedish (sv) |
99.45%
|
Danish (da) |
98.8%
|
Dutch (nl) |
96.86%
|
Spanish (es) |
96.85%
|
Estonian (et) |
94.2%
|
Italian (it) |
93.54%
|
French (fr) |
92.78%
|
Greek (el) |
92.57%
|
German (de) |
92.34%
|
Bug Killers and Buzz
Person | Bugs Closed |
Andreas Kling |
103
|
Robert Moore |
50
|
Philip Rodrigues |
45
|
Tommi Tervo |
30
|
Seb Ruiz |
26
|
Andras Mantia |
25
|
Danny Allen |
22
|
Eric Kjeldergaard |
19
|
Mark A. Taff |
14
|
Luboš Luňák |
14
|
Program | Buzz |
Amarok |
3237
|
Kopete |
751
|
Kontact |
698
|
Kate |
694
|
KMail |
689
|
SuperKaramba |
686
|
K3B |
686
|
KDevelop |
682
|
Kicker |
561
|
aKregator |
455
|
Person | Buzz |
David Faure |
286
|
zogje |
257
|
George Staikos |
242
|
telex |
233
|
pipitas |
230
|
Aaron J. Seigo |
223
|
boud |
221
|
riddell |
221
|
wheels |
220
|
carsten |
205
|
Contents
Bug Fixes | Features | Optimization | Security | Other | |
---|---|---|---|---|---|
Accessibility | [] | [] | |||
Development Tools | [] | [] | [] | ||
Educational | [] | [] | |||
Graphics | [] | [] | |||
KDE Base | [] | [] | [] | ||
KDE-PIM | [] | [] | |||
Office | [] | [] | [] | ||
Konqueror | |||||
Multimedia | [] | [] | |||
Networking Tools | [] | [] | [] | ||
User Interface | [] | ||||
Utilities | |||||
Games | [] | [] | |||
Other | [] | [] |
There are 87 selections this week
Bug Fixes
Development Tools
Fix a long-standing bug that I could finally somewhat reproduce, which caused growing of quantarc until it was too large to handle, caused by the automatic backup system.
Fix also other bugs in the auto-backup.
Change symlink handling, so paths are resolved after reading from config files. Hopefully it doesn't introduce new bugs.
Save As asked for confirmation of "save before close" for modified files due to the setEncoding() call. This was confusing and could result in data loss as well. For now, remove the possibility to change the encoding in the save dialog (users should change the encoding and save later or save and change later).
Possiby fixes #131728 (I cannot reproduce it with this version).
Don't crash when closing a document in VPL mode.
Should fix the following bugs:
KDE Base
avoid crash if some religion celebrates easter in december
my first bugfix commit
fixes JJ: Right mouse click - search at google - ampersand issue.
Multimedia
Networking Tools
fix the tab movement on RTL desktops
Features
Accessibility
Development Tools
Beginnings of code completion support - extract data for the model from a specified context.
Not even linked in yet
Educational
1. Change mouse pointer to Qt::PointingHandCursor when the mouse is on the image widget in the Details dialog. This provides a visual hint to the user that the widget is clickable (to open the Thumbnail picker).
2. Change all KShortcut( "Ctrl+C" ) to KShortcut( Qt::CTRL+Qt::Key_C ).
Graphics
make it more obvious that this can be dragged by changing the cursor on hover to a hand and drawing a drag grippy on the pixmap. weeeeee... now maybe people will figure it out that you can drag the damn thing ;)
digikam from trunk : new batch tool to re-generate all albums items thumbnails for all icon sizes. Use the new Tools/Rebuild all Thumbnails option for that.
This tool can take a while on slow computers (you can take a coffee (:=)). Note : you cannot use digiKam during thumbnails processing.
KDE Base
Mouse Over Scroll Firefox style scroller
Handle cpu hotplugging gracefully
ok, only move the window if your moving it on the same desktop via the pager. feels a bit odd to me (though i'm starting to get used to it already) and based on user feedback isn't what people expect. it does break a bit with literalism, but if it aligns better with expectation
.........
there's also some BR#s that this applies to but my day has been way too frustrating to go searching for them right now.
powermanager:
* Remove battery-related items from popup when no battery found
* Change systray icon accordingly
The applet becomes basically an access applet to functions such as CPUfrequency and suspend/hibernate
I'm starting to get scared that I might lose this code so I want it in svn now. The basics work, and all that really remains is some testing and implementation of services. SafeSite is a URL analyzer that can aggregate data from a variety of service providers in an attempt to determine if a given URL may be malicious, or a "phishing" attack. It needs to be implemented at the application level, and would be very well suited to KMail, Konqueror, and Kopete. The choice and weight of services should be configurable and they should all default to off or prompt for privacy purposes.
In addition to $KDE_FULL_SESSION add also KDE_FULL_SESSION X property set on the root window (of the default screen). This allows detecting whether KDE is running even from things like "ssh -X" or kdesu which don't preserve the environment. See the comment for more details.
fix the right way: honor protocols that do not support directory listing.
I'm not 100% sure whether a call of locationEdit->lineEdit()->setModified(true); right in front of the return is needed (I think not), so please review ;)
Avoid translation to Qt keycode and back, makes it possible to input even things like "dead_acute" that have no Qt keycode.
KDE-PIM
Added support to read X-Status from mails while import mbox and set correct state back to the imported mails in KMail
KMobileTools now can find bluetooth devices (and services) by libkbluetooth.
GUI: New wizard page to use the feature above.
Implement DELETE command.
In contrast to RFC 3501 it also deletes still existing content and sub-collections.
Office
Much better implementation of indirect painting. Adds the Alpha Darken composite op, as suggested by Ilmari Heikkinen. Currently only workingly implemented for RGBA8 and Grey8, the rest is pending. This adds correct indirect painting in the following cases:
* Paint with opacity varying according to tablet pressure (cool effect, especially with the non-first layer's composite op being set to darken alpha too)
* Paint on layer mask with indirect painting
* Paint on adjustment layer (pending actually working implementation of alpha darken on alpha colorspace)
* Paint with the brush op being different from 'Normal', on a layer that has a different from 'Normal' composite op. Or so =)
Thing that doesn't work yet: indirect painting on selections :(
Users of Krita Development Versions: beware! You will need to recompile koffice/filters/krita (and I even need to manually enter the magick dir and compile that manually) too, in case you only svn up in koffice/krita and make there. This is because the patch changes some things in, amongst others, the PaintLayer, on whose structure the filters depend.
Krita is able to use the Python Image Library (PIL, see <a href="http://www.pythonware.com/library/">http://www.pythonware.com/library/</a>) now to import and export from additional 38 fileformats.
* not much testet yet.
* expect some probs with non-rgb images.
* since PyQt does not currently run with qt 4.2 snapshot tkinter is used for the gui.
Add the posibility that the user can, for the brush paintop, edit a curve that controls the way that the tablet pressure is translated into size, opacity and darkness. The default is to not use these curves, of course, but giving the user the chance to edit it is a plus (because I get the impression that at max pressure, my tablet seems to give a more discrete and pixelated feel, so with my tablet it is nice that now I can set opacity to 100% at half of the maximum pressure).
Implemented support for encrypted documents in KOffice. Opening documents is completely transparent. Note that saving documents is not implemented in the GUI yet, nor is it currently functioning fully correct: there are still interoperability problems. Also moved KoXmlReader from libs/kofficecore to libs/store.
Loading and saving of masks in the Krita Native Fileformat
* implemented loading and saving of grid data
* added some getters to KarbonGridData and made some others const
* made some cleanups in configure dialog and connected defaultSlot to defaultClicked signal
* the snapping and visible state of the grid are not saved/loaded (or should they?)
Multimedia
* Make K3b compile with KDE 3.2
* Make libdvdread an optional dependancy (no Video DVD ripping without it) including --without-libdvdread configure option
* Added K3b option to keep the action dialogs open after the process finished (this was the default behaviour in K3b 0.12. Now the default is back to its old state: close the dialog. This can be changed in the misc K3b settings.)
* Show the splash screen as soon as possible
* Check for transcode & vcdxrip and warn if they are not available while the user attempts to rip a Video CD/DVD.
ATF -> File Tracking (Amarok File Tracking (AFT)? :-)). New read-only algorithm per discussions in IRC. Less robust, but works on read-only collections and is possibly safer. Also possibly drop the ATF moniker, since we're not using embedded tags anymore to track.
* Remove the option to enable/disable history in dynamic mode. It is now on always.
* Disable "Played tracks to show" option if tracks are not removed from dynamic mode, when creating a new dynamic playlist
* Reduce the minimum available tracks to show to 0.
* The beginnings of restoring purged items for podcasts (got caught up in the commit).
Store moods with music now saves mood files as hidden files (i.e., they begin with a dot).
Networking Tools
Redesigned the status dialog. Merged traffic and statistics tab andmerged connection and ip tab.
I dedicate some time in this summer to my KDE sniffer... I hope I can continue
I've seen a lot of things to fix to release version 0.2
I've made some changes in the configuration dialog implementing the possibility to turn off the warning when in the capture you get 0 packets
Now if a network error occurs I can detect it and stop the sniffing
I have to change the way 'ksniffer' communicates with the suid 'sniff' because is not so good now...
Multiple queue and session related changes:
- better handling of multiple connection threads per session
- better handling of connection losses
- removed directory scanning from TransferDir
- consolidated TransferDir and Site common code to QueueGroup- minor cleanups
* Support %nick as a placeholder for the current nick in the auto-connect commands.
* Don't balk on leading whitespace in the auto-connect commands. I assume I'm not the only one who by reflex puts a space after the separating ";".
This is a work arround for bug 112755. Now conversation support BIDI completely. The problem was caused by a bug in QTextEdit. See the bug report for a full explain.
I also documented, blah... just gave a link... which explains what are those BIDI constants used in the source.
this is an experimental patch which aims at testing a new algorythm for detecting the direction of the string: istead of checking the first strong character, this tests for the whole sentence and counts the appearence of LTR and RTL chars. this also counts for neutral chars and if the sentence has no real direction, the next stage will be to keep the direction of the last line.
this will help people writing lines like:
:)
after writing a hebrew/arabic line. the smilie will be also RTL.
as a bonus, on the commented code i cached up the string length. no need to compute it all the time. another small optimization should be using pointers and not arrays (or QChar::at() ) which is o(n) instead of o(1).
boy, how i miss qt4 :)
User Interface
new icons
new icons
new icon
some flags
Games
Initial drop of KMahjongg rewrite to add SVG support. Not complete yet, need to port drawing code to QGV and restore loading of custom tilesets and backgrounds, among others. Commiting to avoid losing work. Basic functionality is working, including window resizing (still need adjustments, centering, clean up)
Other
Optimization
Development Tools
- implement job preloading. 4% speedup in a two computer setup.
- new benchmark round. make-it-cool is now up to 19% faster than trunk
after some profiling, greatly improve the performance of the code-completion. The main bottleneck is removed now(by using implicit data-sharing in the TypeDesc-class). Some overall optimization would still be useful.
Don't iterate over the hash. This is 5 times faster than iterating over
the hash. From Adam's box:
real 6m12.953s
user 5m59.642s
sys 0m1.304s
From my box with the patch:
real 1m9.290s
user 0m39.038s
sys 0m1.976s
Our boxes are about the same speed so the speedup is huge. To quote adam:
holy crap that's *SO MUCH BETTER****
Office
UI: First changes to move from an application based on single elements to an aplication based on sequence of elements. These changes allow to traverse formulas faster. Still very buggy.
Improved speed of all filters by some hundred percent.
Other
Accessibility
New approach. A more robust base class and lots of type data -- a typelib
Educational
Merged changes from KTouch version 1.6 (KDE 3.5.4) into current QT4/KDE4 trunk version. Fixed some Qt3 compat issues and replaced QVector, QValueVector, QValueList classes with QList.
Replaced std::set with QSet. KTouch compiles and runs but does not work properly yet.
Graphics
KDE Base
Port the jstream:// kio slave to the new archivereader code in strigi.
KDE-PIM
Create a branch of KNotes for Season of KDE's development
Office
Networking Tools
Import Privacy Plugin into svn.
This plugin allows flexible filtering of messages by sender and/or by content.
add dir for Multi-Segment plugin.
Games
KGet is now QT3_SUPPORT free! (Except the Konqueror plugin. The plugin needs some more work anyway.)
Other
This patch removes the buffer manager and reverts to doing dynamic memory allocations without shame. Eigen must just keep focus on simple things, it's not intended for large computations, and anyway my implementation was not so good.