From: <sl...@li...> - 2007-10-14 12:48:07
|
> I'm also looking for an opportunity to start with developing something for > KDE. I like basket application very much. > So, I think I can help you with porting to KDE4. I know C++ good enough, > but QT/KDE just small experience. > Maybe you can suggest some small introducing job (junior job). And what's > the current state of basket ? > Of course, I have kde4 installation from svn. So, it won't be a problem. Good. The most urging task for now is porting to KDE 4. The port has started, but is now stalled (as is the project as a whole). If you want to participate, send me a private email with a username and=20 crypted password. To encrypt the password, you can use the Linux command "htpasswd -n=20 YOURUSERNAME". Or you can generate the password yourself using that website: http://shop.alterlinks.com/htpasswd/passwd.php You will have SVN account. The KDE 4 port is in the branch "kde4port". If you want, I'm sometimes on IRC (#basket-devel on irc.freenode.net). And for JJ, I sent a mail several months ago about them: Hello all, As requested, here are a handful set of tasks to do that do not require to= =20 touch to too much classes at once, so you can learn the code internals bett= er=20 while being quickly rewarded with a finished and useful feature. As they are here for you to familarise with the code, I propose you to do t= hem=20 in trunk, instead of the KDE 4 branch. I think changes can easily be merged= =20 between two branches. And why not, if a few new features are interesting we can release a version= =20 1.1. I'm thinking to "Cheap Document-Like Interface", "'Reload Basket' DCOP=20 Call", "Insert a Computation", "Import From Other Softwares", "Automaticall= y=20 Title new Links" for instance. Any of them is important enough to let us=20 release a new version. =2D Filter by Several Tags: =A0 By entering such term in the filter text field: =A0 'aStringToSearch tag:"To Do" tag:Important' =2D Menu Entry "Split Note": =A0 Only enabled when a text note is currently edited. =A0 When pressing it, the program retreive the cursor position of the text = edit, =A0 "cut" the text after the cursor and "paste" it in a new note just bello= w the =A0 current note. =A0 Bonus: if the cursor was at the start or at the end of a line, the empty =A0 line should be removed. =A0 Bonus 2: another action "Transform First Line to Title", enabled when a= text =A0 note is selected (not mandatory editing). This will extract the first l= ine =A0 of the note, create a new note on top, paste the text, assign the "Titl= e" =A0 tag to it, group those two notes, and start editing the second note if = it =A0 was editing before the "make title/content and group". =2D Cheap Document-Like Interface: =A0 Pressing the Down key while the cursor is at the last line of a text ed= itor, =A0 retreive the cursor X position, end the edition, start the edition of t= he =A0 text note just below and set the X cursor position. =A0 This will be the begin and a cheap way to implement the "document-like =A0 interface". I especially would like this feature a lot, and I think I'm= not =A0 alone! =A0 The goal is to automate the mode change, and make the whole basket like= one =A0 big document =A0 Bonus: do the same thing with the Up key, to move the cursor to the text =A0 note just above the currently edited one. This is less important than t= he =A0 Down key. =2D "Reload Basket" DCOP Call: =A0 The SuperKaramba "DesktopBasket" applet is retreiving the notes with =A0 the "Desktop" tag assigned to them, to make them always available. =A0 The interface allows the user to edit a note right on the desktop. =A0 BasKet Note Pads is noticed that the note file was modified, and then r= eload =A0 the note in live. =A0 But there is something that DesktopBasket cannot do: add a new note, or =A0 remove one. Because BasKet Note Pads will not reload the whole basket. =A0 The goal of this JJ is to add a new DCOP call (the project already have= a =A0 DCOP interface, so only a new call need to be implemented) with one =A0 parameter: the URL of the basket folder. The call will retreive a Basket =A0 pointer that match the folder URL, end the note edition, if any, put =A0 Basket::m_loaded and Basket::m_loadingLaunched to false, and it should =A0 suffice to trigger a new reload the next time it is needed. Yes there w= ill =A0 have memory leaks but guess what, there are already a lot of them :-/ =A0 Bonus: a call "Reload all Baskets" that could be called after a script = sync =A0 baskets between two computers using rsync, unison or a similar technolo= gy... =2D "Add Selection to Current Basket" Extension for Konqueror and/or Firefo= x: =A0 Add a new DCOP call addPlainTextNote(text) and addRichTextNote(html) ca= lls. =A0 Then make a Konqueror or Firefox extension to add a toolbar icon in tho= se =A0 applications, that will call either one or the other DCOP call. =A0 Be careful: the current basket can be not loaded yet (the application w= as =A0 restored from another session and not displayed yet): the basket should= be =A0 loaded prior to add the new note. Look at how global keyboard shorctuts= are =A0 coded and copy/paste/modify the code: if the basket is not loaded, they= load =A0 it and display a passive popup "Basket Loading...". =A0 Alternatively, to avoid digging to learn how to do Konqueror/Firefox =A0 extensions, you can do a Konqueror Service Menu to copy or move a file = to =A0 the current basket. Service Menu are the actions available when doing a =A0 right click on a file and choosing "Action -> *". They are easy to crea= te =A0 and well documented. =2D Usage Statistics: =A0 Count the number of baskets the user has, the averagde number of notes = in =A0 baskets, the total number of notes in every baskets, the number of note= s of =A0 every types (how many people use the Color note type?), how deep note g= roups =A0 are on their computers, how much each standard tags are used, how much =A0 custom tags people have added... =A0 This would be useful for beta versions where people can send anonymous =A0 statistics about their usage of BasKet Note Pads. It can be interesting= to =A0 know if people use Image notes a lot, if they have very long baskets or= not =A0 (if we should optimize that use case), if they ever used "Unknown" note =A0 type... =A0 While this JJ is not a priority, it is easy to do: just a matter of bro= wsing =A0 all baskets recursively, load them if not done yet, browse the notes =A0 recusrively. It will be yet another help to help usability work, especi= ally =A0 "how deep note groups are": there was a question on the Usability Proje= ct if =A0 we either change the Group notion and restrict how deep they can be, or= if =A0 deep groups of groups of notes are really needed/used. The "how much ea= ch =A0 standard tags are used" could be as helpful by pointing tags that can s= afely =A0 removed in order unclutter the default application. =2D Mix Colors: =A0 If two or more color notes are selected, that action will be enabled. =A0 It will merge both colors (do the average of both) and insert a third c= olor =A0 note with the result just below the second note. =A0 It will be very helpful for web-designers who keep a color palette bask= et =A0 and want to do quick mixes. =2D Insert a Computation: =A0 When a person is editing a text note and press the key "=3D", the code = should =A0 look at what is before the "=3D" character. If it is a mathematical =A0 expression, it compute and insert the result. =A0 Imagine: you type "18 + 2 * 76.4 ", then press "=3D" and the text is =A0 automatically completed to become: "18 + 2 * 76.4 =3D 170.8". =A0 Very handy! =A0 Note: you will use a library to do the computation, perhapse take the s= ame =A0 library as Alt+F2 minicli use. With a library, this JJ is easy. =A0 Bonus: if the "=3D" is preceded by a space, add a space between the "= =3D" and =A0 the result. If not (the "=3D" is stricked to the computation), then add= no =A0 space. Example : "1+1=3D" becomes "1+1=3D2" and "1+1 =3D" becomes "1+1 = =3D 2". =2D Sort Notes Alphabetically: =A0 This action will be quite complicated because it requiere to deal with =A0 recursion and the quite bad state of the code I produced to =A0 insert/remove/move notes in the hierarchy. =A0 But it can be interesting. =2D Fold all Groups Except the Current One: =A0 Quite easy to do, browse every notes recursively, and if it is a group = that =A0 is not folded AND it is not one of the parent notes/groups of the curre= ntly =A0 focused one, then fold it. =2D Bug: New Tags not Added to the "Filter Tag" Listview: =A0 When using the "Customize Tags..." window, if you every create a new ta= g or =A0 state, you will see that it is not added in the "Filter Tag:" combobox. =A0 At every change of the tag collection, that list should be reconstructe= d. =2D Only Show Assigned Tags & States in the "Filter State" Listview: =A0 It's a bit more complicated, but at every basket change, that list shou= ld be =A0 reconstructed, looking for every tag and states if it is assignated to = one =A0 note or not. Be careful: show all tags if global filtering is activated, =A0 because we can't load every baskets to be able just to fill that list. =A0 This "optimization" will be handy because in every baskets, people only= put =A0 2 or 3 tags. They need to scroll a long list while they want to filter = one =A0 tag, whereas a lot of them will return no result at all! =A0 This will also make more obvious that this list is not to ASSIGN tags (= it is =A0 the role of the Tags menu) but to FILTER tags. =2D Import From Other Softwares: =A0 If you have another note taking application you would want to import da= ta =A0 from, then there is one class dedicated to import in the code source, f= or =A0 instance a Windows application, like Treepad or Keynotes (we will need = this =A0 since BasKet Note Pads 2.0 will be available for Windows, and anyway, a= lot =A0 of switchers need to convert their notes to Linux). =A0 This is an easy enough task, as it only involves working with a few cla= sses. =A0 For instance, you could do "Import Bookmarks" from Konqueror or Firefox= , to =A0 create a basket with links (and groups of links). =2D Automatically Title new Links: =A0 When pasting a new link, a background processing should be launched to =A0 retreive the first 100 bytes of the file. If it is an HTML file and tho= se =A0 first bytes contains the <title> tag, then assign that value to the Link =A0 title. =A0 Imagine, you paste "http://dot.kde.org/1184809999/" and a second later,= the =A0 link now displays "TechBase Hits 1,000,000". =A0 It is more user-friendly! =2D When Moving a Free Note, Drop it Where it Was Picked =A0 When dragging a free note, the top-left corner of this note is dropped = at =A0 the cursor position. =A0 This JJ would requiere storing the X,Y position clicked while starting = the =A0 drag, and shift the dropped note so that the X,Y point on the dragged n= ote =A0 becomes just under the mouse. =2D Drop a Color List =A0 Try copy this two-lines text and paste it in a basket: #bbb #00dd00 =A0 It is pasted as a text. Now, copy/paste one of those lines: it is corre= ctly =A0 pasted as a color note. =A0 The goal of this JJ is to recognise a text list of colors and paste two =A0 color notes in this example. =A0 This is already done for text-list of URLs like that: http://basket.kde.org/ http://dot.kde.org/ =A0 Bonus: would be cool if a list of mixed URLs and Colors would paste the= good =A0 type of notes. For instance copying that text of 4 lines will create two =A0 Link notes and two Color notes: http://basket.kde.org/ #bbb #00dd00 http://dot.kde.org/ Happy Hacking, S=E9bastien Lao=FBt. |