Teaching KDE

DISCLAIMER: We know KDE is wider concept than simply application development but in this post i’m gonna talk about development related issues πŸ™‚

INTRODUCTION: I suppose we all might agree with the fact that the most solid pillar of the Open Source World is the idea that every little piece of code might be an helpful reading for other developers in increasing their knowledge. This means that sharing knowledge is our strength. I really don’t want to argue against other form of softwares, i’m just underlining the strength of our personal form of software beliefΒ  (second disclaimer :P). As many of you may already know i’m a student of Computer Science Engineering at the Politecnico of Bari here in Italy. I’m not very happy of how *they* teach most of the subjects we study in the courses and most of my sadness is due to the way they teach (or try to teach) us programming languages. Nearly two years ago i passed my C++ exam but all we learnt was how to create simple command line-apps that we might have easily written in C. I’ve always dreamt about a C++ exam where the teacher picks a piece of KDE code as example and uses it to teach us all the funny things of developing an application, advanced C++ tricks and so on. I know i still have the “Software Development Engineering” exam at the 2nd specialistic degree (don’t really know how to say that in english) but i’m sure *they* won’t teach us developing applications starting from a real successful example from the Open Source World.

THE IDEA: So, an idea came to my mind. I proposed to some friends the idea of building up a C++/Qt-KDE course open to every one interested in it. We have students associations that help us fight for our rights and realize self-managed courses like the one i proposed. The idea was accepted and really lots of student signed up!! This makes me really proud and happy since i have the chance to teach something i learnt (and continue learning) developing in KDE.

THE COURSE: The course will be of 10 lessons, 2 hours each. Students are supposed to have C++ basis since i’d like to deep start with the real development. Most of our courses at the university are just about theory (this is one of the big problems of italian universities: too much theory, really poor practice); so i’d like to help them make practice. I talked to two of them and their expectations about the course are just these: design and develop an application, practically!! Put their hands on the code, fight against build errors, optimize code and so on.. The stuff we do almost every day with KDE xD. So i’d like to use the 10 lessons to design and develop a real simple KDE application discussing the designing problem with them lesson by lesson. This way, after the course, they will be able to continue taking care of their little baby maybe making it grow as much as having the opportunity to publish it on KDE-apps.org maybe πŸ˜€

YOUR HELP: And now let’s come to the real goal of this post :D. I haven’t yet decided what application they’re gonna develop with my help. It just came to my mind the idea of a simple Text Editing Application but maybe you have nicer ideas. Of course keep in mind that most of them don’t even have ever touched Qt/kdelibs/cmake. I’d start from the techbase tutorials to help them write a basic KDE application and then start with the real development. In addition to this i was looking for a live distro that ships at least KDE 4.2 with cmake kdelibs-dev and kwrite to help those students without Linux on their PCs (i think i’ll force all of them installing it πŸ™‚

So please, lemme know your ideas, suggestions, insults and whatever.. everything but spam is appreciated xD



17 Responses to “Teaching KDE”

  1. 1 flo March 31, 2009 at 3:39 pm

    Maybe ambitious but this application would be really nice:
    A semantic diff application. A diff-application that gives different possibilities (maybe even incomplete) to show the diffs.
    For instance:
    – xml. Start by showing the diff-output as generated by ‘diff’.
    Then add mode that shows xml-differences (where order does not matter).
    – Pictures: Show them next to each other. another mode that just gives the meta information. Another one that shows an XOR-diff, etc.
    – html-diff: show the diff-output. Show the pages next to each other, etc
    – code-diff: diff-output, another mode with information the program was able to gather (like for instance renamed variables…)

    I think it would be nice for several reasons:
    1. you can start slowly. Just let them show txt-diff first.
    2. you can teach good design.
    3. you can show how it’s easy to use existing widgets/frameworks to show the data. (khtml to compare web-pages, …)
    4. it’s useful. I for one would really like such a tool.
    5. even if the students don’t finish, you might be able to propose a plugin-system so that at least their plugins might be reusable.

  2. 2 An March 31, 2009 at 3:54 pm

    Awesome! Best of luck with this and whatever you do!

  3. 3 Jurian Sluiman March 31, 2009 at 5:18 pm

    This is a good idea! Is this course meant to be specific for students of your university? Otherwise, is it possible to make it public and archive it for later usage? For example myself, am able to program php and so on. I’m willing to learn C++ and after that, writing some Qt apps. This course might be really good to get some practice (but I think I need such thing in about a year or something).

    To get some ideas, you could check the KDE brainstorm forum. There are some pretty good ideas for starting simple programs. One that will certainly adopted by the community is a backup program. E.g. a daemon which is able to backup automatically, a frontend to do it by hand and to recover the backups if necessary.
    Lots of ideas are listed on the brainstorm forum!

  4. 4 nmuntz March 31, 2009 at 5:19 pm

    Is this going to be an online course or are you doing it at your university? I would love to get the handouts/notes at least if you are doing it at your univesity. It would be very interesting to create something like a kde university and have regularly some c++/qt/kde development courses to attract new developers.

  5. 5 eDog March 31, 2009 at 5:27 pm

    It’s a beautiful idea! Unfortunately, I live near Padova which is a bit far from Bari πŸ™‚

  6. 6 Alessandro Diaferia March 31, 2009 at 6:00 pm

    @flo: your idea is really well structured but maybe a bit complex for my purposes.. anyway i can take something from your idea maybe or eventually start that project on my own, who knows.. anyway i’ll let you know =)

    @Jurian Sluiman, nmuntz: the course will not be online unfortunately but for sure i’ll do my best to publish notes and whatever i collect about it πŸ™‚

    @eDog: i’ll reserve you a seat anyway xD

    @An: thank you very much indeed!!

  7. 7 pkt March 31, 2009 at 7:42 pm

    How about an application that displays callerID notifications?

    It should be easy enough for 10×2 hours and you don’t have to implement the part where you get the actual data from the serial
    port, just emulate it or ‘steal’ it from one of the existing apps.

    Just my 0.02

  8. 8 pkt March 31, 2009 at 7:48 pm

    You could do it like this:

    Step 1: Implement the ‘notification bubble’ UI using existing libraries.

    Step 2: Connect with kaddressbook so that the app can translate known phone numbers to contact names.

    Step 3: Allow looking in the web for numbers not in addressbook.
    If you don’t get an answer fast enough, just show the number.

    Step 4: Actually get the data from an internal or external modem
    (the hard part)

    Even if only some of the parts could be implemented it would still be useful at least to some people πŸ™‚

  9. 9 pkt March 31, 2009 at 7:49 pm

    Another (much harder but more generally useful) idea is to port as much from basket as you possibly can to kde4.

  10. 10 doubledribblin March 31, 2009 at 8:07 pm

    Maybe go through the requests section of the user forums to turn up some ideas for a project?

  11. 11 Vlad March 31, 2009 at 8:35 pm

    Sounds like a great idea! I recommend trying to be realistic with goals – not making the end result project too complex. Actually submitting a patch to the KDE project might be nice as one goal though, so as to introduce the students to contributing to open source projects.

    moving an app from kde3 to kde4 is not a good idea because the point of the course is to learn kde4 programming, not do to do grudge work for the project πŸ™‚ Plus, that would include learning kde3 and kde4, qt3 and qt4.

    Another suggestion, I have been learning C++/Qt/KDE programming on my own time from this excellent online book “Introduction to Design Patterns in C++ with Qt 4”:


    you may find some useful examples and tips in their on how to conduct the lessons.

  12. 12 Nick Ogden March 31, 2009 at 9:21 pm

    Why not have them put the effort into KOffice… It could really use the man power and it has one hell of a text editing app! =P That way the students could have a wide range of stuff to do, from text (KWord), to graphics (Krita), to mathematics (KAlgebra) etc…

  13. 13 Andy Goossens March 31, 2009 at 11:00 pm

    Hmmm, something fun and not too complex…

    Why not a simple webbrowser? They can create it by using a QtWebKit component. And it has a high coolness factor πŸ™‚

    Possible tasks:
    * use the UI designer to drag & drop widgets
    * adding signals to connect widgets together (e.g. pressing enter in address bar changes the QtWebKit widget’s URL)
    * making back/forward buttons work
    * implementing tabbed browsing
    * bookmarks
    * etc …

  14. 14 atomopawn April 1, 2009 at 2:30 am

    Last year (my first year of teaching at the college level), I offered a class on Qt4 GUI programming. I used the Blanchette Book as a basis and put together some programming labs that might be good resources for this course you’re putting together. Because I use some code from that book, I don’t feel comfortable publishing the labs publicly (don’t want to violate any copyright laws), but I might be able to create some adaptations of them for your course.

    I’ve learned a lot more about Qt4 and the KDE4 libraries since then by contributing patches to some KDE4 programs, so they probably could stand some revision anyway.

    Anyway, let me know if I can help in any way. I think this is a REALLY great idea and I’d love to see it become a resource that would encourage professors to adopt Qt4/KDE4 applications for their typical classroom development.

    Robert Marmorstein
    Longwood University
    Farmville, Virgina
    marmorsteinrm AT longwood DOT edu

  15. 15 Alessandro Diaferia April 1, 2009 at 9:44 am

    Thanks to everyone for your encouragement! πŸ™‚

    @Vlad: the book seems really helpful, i’ll keep it in mind while developing my lessons

    @Andy Goossens: the webbrowser idea is really interesting from my point of view.. even if there are already many webbrowser this could be a nice way of learning many things about Qt/KDE development.. i’ll take it in big consideration, thanks πŸ™‚

    @atompawn: i’m happy to hear from someone already experienced about this.. if you mind sharing something about your lessons feel free to contact me via email: alediaferia _at_ gmail _dot_ com

    thanks again!! πŸ™‚

  16. 16 anony-mouse April 4, 2009 at 3:05 pm

    Why not it online (IRC?) If you did, I’m in! I have studied a fair bit of C++ but that was years ago. I’d appreciate if the first session was a quick round up of C++ (especially the features of the language that are used heavily in KDE)

  17. 17 eDog April 4, 2009 at 10:12 pm

    I’ve an idea about this and other courses.. I wrote it here –> http://forum.kde.org/a-new-way-for-teaching-kde-t-39630.html

    What do you think about it?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: