=== yofel_ is now known as yofel [11:45] * obengdako is away: Away obengdako is idling about [11:45] * obengdako is back (gone 00:00:06) [11:46] * soreau is wondering: why some clients allow away/back messages [11:47] * obengdako i allowed mine to do so soreau [11:48] obengdako: They are really useless and annoying messages [11:49] soreau, i know i just wanted to let those i chat with know when i've stepped away from the pc [11:49] Hint: No one cares if you are there or not [11:50] They certainly dont need message to proclaim absence or presence. If you are talking, they will know you you are at your computer [11:50] obengdako: it's considered rude to do public away messages like that [11:51] please don't do them [11:51] if you set normal /away then people can use /whois to see if you're around or not [11:51] (or if they PM you, they'll get a message that you're away) [11:51] Yes, that is much more concise way of putting it [11:51] Pendulum, oh really then i'll disable [11:51] Pendulum, so i use the command "/away" instead? [11:52] yep [11:52] /away [11:52] and /back [11:52] (or just /away) [11:52] * obengdako is away: trying the away feature [11:52] the problem is not with 1 person doing them, but everybody starts to use those messages after some time 90% of the traffic in the channel is only that ;) [11:52] Right, and its useless messages no one needs to read [11:53] * obengdako is back (gone 00:00:29) [11:53] okay but it still shows up in the channel Pendulum [11:53] obengdako: seems like you have a script or alias or something that overrides teh default /away [11:53] obengdako: what IRC client do you use? [11:54] xchat Pendulum [11:54] i changed some of the away settings [11:54] okay now it is working Pendulum i changed the announce away setting [11:55] now i'm away [11:55] hehe [11:55] thanks! [11:55] Cool [11:55] check my whois and tell me if i did it right [11:55] and what is my reason [11:56] Pendulum, please check my status and my reason i want to be sure those interested can tell i'm away [11:56] * [obengdako] is away (hehe) [11:56] obengdako: got the same thing as soreau [11:56] thank you for fixing it so it doesn't announce [11:56] okay thanks Pendulum soreau [11:56] no problem [11:57] BTW: in xchat you can right-click a nick to see the away message [11:57] lol [11:59] so no one really uses away here in irc even when they are away? [13:06] Hi [16:50] The last Ubuntu App Developer Week day is starting in ~10 minutes \o/ [16:52] salut a tous [16:55] hello all [16:55] Hi [16:59] hi [17:00] Ok everyone, welcome to the last day of an Ubuntu App Developer Week packed with interesting content and speakers! [17:00] Let's welcome jryannel once more, who is going to talk about how to extend Qt Quick with C++ === ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu App Developer Week - Current Session: Qt Quick: Extend with C++ - Instructors: jryannel [17:01] Logs for this session will be available at http://irclogs.ubuntu.com/2011/04/15/%23ubuntu-classroom.html following the conclusion of the session. [17:01] Hi, I'm from QtDF my name is Juergen Bocklage-Ryannel [17:02] I'm mainly doing training and training material [17:02] today I would like to talk about Qt Quick and how you can extend it with c++ [17:02] For all of you who don't know Qt Quick... [17:03] it's a declarative language build on top of Qt C++ to create great user interfaces [17:03] I prepared a small project for today [17:03] please download it from: https://github.com/jryannel/ubuntu-qtquick-webinar [17:04] I will try to guide you through the project. While you are downloading I will tell you something about Qt Quick and C++ [17:04] Don't worry if you can't download you will also understand without [17:05] Qt Quick is based on a Qt module called QtDeclarative [17:05] saimanoj asked: how to download the project? [17:05] Please go to: https://github.com/jryannel/ubuntu-qtquick-webinar [17:05] you need to have git installed [17:06] or grab the zip file under downloads [17:06] QtDeclarative uses our graphicsview (a 2.5d canvas based on graphics items) [17:08] QtDeclarative is a ui runtime [17:08] it contains an QtDeclarativeEngine which will interpret your qml file [17:08] and a QtDeclarativeView which will paint the items [17:09] If you open the project (QtCreator ->Open Project) QmlCppExample.pro in [17:09] ubuntu-qtquick-webinar/QmlCppExample source tree [17:10] You will see the project files. [17:10] Please open the QmlCppExample.pro file [17:10] in the .pro file I added "QT += gui declarative" [17:11] This is to make the project aware we want to use the QtDeclarative modue [17:12] Now we can use the module in the main.cpp [17:12] Please open the main.cpp file [17:12] There we create a view "QDeclarativeView view;" and set the [17:12] qml source with "view.setSource(QUrl::fromLocalFile("main.qml"));" [17:13] As usual in qt you need also call show " view.show();" [17:13] You will find the main.qml file in "Other Files" in Qt Creator [17:14] It's a simple Rectangle with a blue color and a MoouseArea, which doesn't do anything currently [17:14] Just try to run the project [17:14] for people which don't use qt creator... [17:15] qmake; make; ./QmlExampleCpp [17:15] You need to have Qt 4.7 installed and in you rpath [17:15] If you get an error running the project in creator, you need to uncheck the shadow build [17:16] This is on the side-bar under the Projects tab [17:16] Just uncheck there "Shadow build" [17:16] If you run the project, you see a blue window, which is our blue Rectangle [17:17] In our project we would like now to change the color from c++ side [17:18] You need to uncomment the code between //1{ ... //1} markers [17:18] in main.cpp and main.qml [17:18] Also comment the code between //{0 markers in qml [17:18] in main.cpp the line "view.rootContext()->setContextProperty("value", QColor("green"));" [17:19] pushes a property "value" into our rectangle with the value of the color green [17:20] We access the value in our qml file with "color: value" [17:20] This right side value actually comes form the c++ side. [17:20] So far so easy [17:21] Now we want to push something more complicated into our declarative environment, [17:21] a QObject which has a value, which again is a color. [17:22] Please comment the code between //{1 markers and uncomment the //{2 markers [17:22] in main.cpp and main.qml [17:22] We have a class derived from QObject called ValueObject which contains a value property [17:23] If you look up the valueobject.h file you can see how you declare properties for qml [17:23] You have a setValue(...) a value() method and [17:24] a valueChanged() signal [17:24] all 3 are required for a read/write property [17:24] We make them aware to the object as property with... [17:24] Q_PROPERTY(QColor value READ value WRITE setValue NOTIFY valueChanged) [17:24] This says, make a property of type QColor named color ... [17:25] the read method is the value() method, [17:25] the write method is the setValue(...) method [17:25] and to notify qml about changes use the valueChanged() signal [17:26] All methods are pretty simple, the only one worth mentioning is... setValue(...) [17:26] Please have a look in the valueobject.cpp file for the setValue implementation [17:26] if(_value != value) { [17:26] _value = value; [17:26] emit valueChanged(); [17:26] } [17:27] The if ( ... ) is a guard to avoid loops. [17:28] Only if the value has really changed you should emit the changed signal. You need to obey this rule, otherwise you can get infinite change loops [17:28] So now we have q ValueObject with a value property ready to be used in qml [17:28] In main.cpp we create a object of this value with: "ValueObject* value = new ValueObject(QApplication::instance());" [17:29] and push it into qml with "view.rootContext()->setContextProperty("valueObject", value);" [17:29] This says, make our value object known to qml as "valueObject" [17:30] So we can use it now in our main.qml file [17:30] "color: valueObject.value" [17:31] You should see a blue rectangle. You can change the color simple by changing the color in valueobject.cpp (look for _value(Qt::blue) [17:31] Another way to change it is inside qml. Here we use the mouse area [17:32] "onClicked: valueObject.value = "yellow"" will make our valueObject color property change to yellow [17:32] This change is cascaded to our rectangle [17:32] remember we have our rectangles color bound to "color: valueObject.value" [17:33] So when you click on the rectangle the onClicked handler is called and the color should change to yellow [17:33] I hope you can still follow me :) [17:33] Next case would be we would instead of a simple property, we want to create a new qml element. [17:34] We want to have a ValueObject element in qml, where we can get the color value from. [17:34] For this please comment the //{2 marker code and uncomment the //3{ markers code [17:35] So instead to push an object, we want to register a new type to qml. [17:35] Look in the main.cpp file... [17:35] Here we find: "qmlRegisterType("Application", 1, 0, "ValueElement");" [17:36] This line says, register the type ValueObject under the module name "Application" in version 1.0 as ValueElement element [17:37] So now we have in a module Application a new qml element calles ValueElement [17:37] Let's see how we can use it: open the main.qml file [17:37] The line "import Application 1.0" imports our new module [17:38] which we registered with the qmlRegisterType from c++ code [17:38] Sure you can have many elements inside one module. [17:38] We use the new element with "ValueElement { id: valueElement }" [17:39] Our new element is now accessible under the id: valueElement. [17:39] As this is a new element you can create as many of them as you want [17:39] with "color: valueElement.value" we access the color of our new element, by the id [17:40] and in our mouse area we can change the color using "onClicked: valueElement.value = "red"" [17:40] I hope you get the idea [17:40] Jus to recap... [17:41] You can push simple properties into qml, complex properties (e.g. objects) [17:41] and also new elements. [17:41] But this is just the start... [17:42] You can create own elements which can paint, for example an ellipse [17:43] For this you would need to derive a class from QDeclarativeItem [17:44] But I think we are running out of time to show this here... [17:44] So I post some links with comments [17:44] have a look at :http://qt.nokia.com/developer/learning/online/training/materials/qt-essentials-qt-quick-edition for the "Training Module Integrating QML with C++ from" [17:45] This explains how to create a simple ellipse item and adds on this more complicated stuff, e.g creating other types, using enums, ... [17:45] You you want to learn more about what we did currently please read: Qt Declarative Binding [17:45] http://doc.qt.nokia.com/4.7-snapshot/qtbinding.html [17:45] and Extending QML Functionalities using C++ [17:45] http://doc.qt.nokia.com/4.7-snapshot/qml-extending.html [17:46] You can also create qml modules as plugins [17:46] This is explained in the training module, but also in QDeclarativeExtensionPlugin Class Reference [17:46] http://doc.qt.nokia.com/4.7-snapshot/qdeclarativeextensionplugin.html#details [17:46] If you want to mix traditional widget code and qml please look at: Integrating QML Code with Existing Qt UI Code [17:47] http://doc.qt.nokia.com/4.7-snapshot/qml-integration.html [17:47] If you want to see how the Qt developers have written their declarative items, checkout the qt source code and navigate to: /src/declarative/graphicsitems/ [17:48] There you find the code for the Item qml element in "qdeclarativeitem.h" [17:48] And for the Rectangle element in "qdeclarativerectangle_p.h" [17:49] Please note the rectangle has a _p in the name, which declares it as private. So you can't derive from it in c++. [17:49] Only the QDeclarativeItem class is meant to be derived [17:49] I would recommend you checkout the Example: Minehunt [17:49] http://doc.qt.nokia.com/4.7-snapshot/demos-declarative-minehunt.html [17:50] This shows how to make a minehunt game in qml, where the game logic is in C++ [17:50] You find other examples at: More Examples: [17:50] http://doc.qt.nokia.com/4.7-snapshot/qdeclarativeexamples.html [17:51] From the DevDays 2010 in Munich we have also a video, which explains QtQuick and C++ very nicely: TechTalk Developer Days 2010 [17:51] http://qt.nokia.com/developer/learning/online/talks/developerdays2010/tech-talks/qt-quick-for-c-developers [17:51] This closes my talk on Extending Qt Quick with C++. [17:52] I hope some of you where able to compile the example and get an idea about how qml and C++ can work together. [17:52] Remember you can use JavaScript in QML, but you should not make to much use of it for performance reasons. [17:53] But this truly depends where you run your code. [17:53] A tip at the end, you can also embed qml files as resource files in your executable. [17:53] By this deployment get's much easier [17:54] I would like to see how someone uses Qt Quick with a WebFramework like Rails or Django [17:55] QtQuick is network transparent so you can load qml files form a server or let them dynamically generate by a webframework :) [17:55] Okay take care and I leave the stage for the next session. Bye! === ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu App Developer Week - Current Session: Phonon: Multimedia in Qt - Instructors: apachelogger [18:02] You'll know him not only for his good looks and legendary coding skills, but also for having rocked this AppDeveloper Week: there he is - KDE/Kubuntu developer apachelogger talking about how to write a multimedia app in virtually no time! [18:03] apachelogger, let's roll! [18:03] :D [18:03] thanks dpm [18:03] bonjour, ahoy and welcome everyone! [18:04] ...for the third time this week ;) [18:04] Today's special on the menu: Phonon, the most awesome terrific super cool magical unicorn multimedia abstraction library ever! [18:05] First let's get dependencies sorted out as we will have a bit of coding later on. [18:05] If you like GStreamer you might want to use this command: [18:05] sudo apt-get install phonon-backend-gstreamer libphonon-dev qt4-qmake libqt4-dev build-essential [18:05] If you like VLC you might however want this one: [18:05] sudo apt-get install phonon-backend-vlc libphonon-dev qt4-qmake libqt4-dev build-essential [18:06] If you have a very old version of Ubuntu OR like xine: [18:06] sudo apt-get install phonon-backend-xine libphonon-dev qt4-qmake libqt4-dev build-essential [18:06] At any rate a simple text editor will suffice for the editing part ... it is all nicely prepared for copy and paste :D [18:07] Should there be any questions, please just drop your QUESTION: in #ubuntu-classroom-chat at any point. [18:07] But enough of that nonesense. [18:07] Let us talk about Phonon \o/ [18:07] Phonon is a multimedia abstraction library powered by pluggable backend components, adapting the Phonon API to specific multimedia frameworks/libraries. [18:08] ^ I actually made that description up just 5 minutes ago, though it captures Phonon pretty well, plus it got buzz word factor ;) [18:09] Primarily Phonon is an abstraction layer between multimedia consuming applications (such as music players, games or sound notification systems) and a specific multimedia library (GStreamer, VLC, Xine, Helix, QuickTime, DirectShow, Microsoft Media Foundation, etc.) [18:10] Possibly the fact that I listed 7 of such libraries and yet could not resist appending an 'etc' might give you an idea of why exactly abstraction makes sense. [18:11] Who seriously would want to maintain good multimedia experience on >3 operating systems? [18:11] Well, the Phonon team, obviously ;) [18:12] Especially in a Qt context you really do not want to make your application depend on one of those 300^31000 libraries for multimedia, or implement your own abstraction system just to become portable to all platforms (read: operating systems) that you might have time to implement support for. Instead we could just do it once ... in Phonon. [18:13] Additionally. If one of these libraries decides to change their API, why would every Qt application developer need to spend their Monday afternoon changing their code to suite the new API? [18:13] If we just as well could do it once ... in Phonon. [18:14] I suppose highlighting all the advantages and disadvantages of abstraction is a bit of apointless exercise, so I better stop now. [18:14] Actually. [18:14] Do not let me blind you... Phonon is not the solution to every problem in computer science. It is abstraction after all. [18:15] If you have a look at the Wikipedia artcile on abstraction you will probably read something like "using a common denominator". === tubadaz_ is now known as tubadaz [18:15] This implies being more limited. As always ... the general is less specific than the specific ;) [18:16] Due to the given constraints of abstraction Phonon does not try "to do it all". [18:16] It does not strive to support every possible use case that might or might not exist for a multimedia library. [18:17] Instead we are focusing on the (actually very small) number of key features that are of use to the greatest possible amount of application developers. === marcel___ is now known as MAWSpitau [18:17] Phonon tries to provide the common set of features you will require in your off the shelf media-enabled applications. [18:18] This ranes from simple (non 3 dimensional) games to video and music players. [18:18] In particular, if you have a look at the Phonon API [18:18] (i) http://doc.qt.nokia.com/latest/phonon-overview.html [18:18] you will hopefully notice that the core set of features of the key classes are actually able to cover jsut about everything most multimedia applications will ever want to do. [18:19] This of course primarily is playback. [18:19] More precisely: simple playback in the manner of just needing to throw a URL at Phonon and it will try to do something meaningful. [18:20] More advanced features are usually bound to the availability of support in the underlying libraries and thus more dynamic (they might be there, or not, or partially etc.). [18:20] That way it is possible to implement a common denominator and at the same time stay powerful enough to enable terrific media-centric applications such as good looking video players. [18:21] ....talking about video player... [18:21] I think it is about time to start doing some coding, because I am getting bored writing all that stuff and would like to copy and paste a bit more ;) [18:22] At FOSDEM I boldly claimed that I could do a video player with 3 lines of Phonon specific code in C++. Whether that is any useful is a question that shall remain unanswered. [18:23] It is however perfect to grasp the basic concept, even if I do not know any application that would only need 3 lines as you usually want to do more engaging things anyway. But oh well... :) [18:23] You can get a template for this from [18:23] (i) http://people.ubuntu.com/~apachelogger/uadw/04.11/phonon-template.tar.gz [18:23] Simple extract it somewhere. [18:24] Inside you can find a main.cpp, a qmake build file and a video and audio file (or so I hope). [18:25] The code I will present goes into the main.cpp in the main function in between the 2 statements that are already there. Includes are also there, so if all goes well you should be able to build this stuff right away. [18:25] Talking about building, you can do that by running [18:25] qmake . [18:25] and [18:25] make [18:25] and then [18:25] ./demo [18:25] to run the application. [18:25] Right then. [18:25] Let us start with a simple audio player. [18:26] The first thing you always need when working with phonon is a media object. [18:26] With Phonon you build a thing we call the media graph, which at its root has the media object. [18:27] To the media object you can attach various outputs (AudioOutput, VideoWidget ...) and even 'inject' effects between the media object and the outputs. [18:27] Very easy to understand I shall hope. [18:28] The media object is like the heart of every media graph. It controls what file you are currently playing, if you are playing at all, at what time the media is .... [18:28] And the best thing about the media object is, that it is insanely easy to create ;) [18:28] (i) Code samples is always indented with 4 spaces [18:28] MediaObject mo; [18:29] That did not hurt at all, right? [18:29] Now let us also add an AudioOutput while we are at it... [18:29] AudioOutput ao; [18:30] You can have many of these media objects, each doing a different thing. For example if you are creating a game, you might want to have a media object (thus graph) for background music and another media object for event sounds (like when a pony rides through the screen). [18:31] Due to this we will need to tell our media object that it should be connected to our audio output. Otherwise there will be probably no sound... wouldn't be much of an audio player then ;) [18:31] Doing this is very easy, we just call Phonon::createPath(a,b) [18:31] like this: [18:32] createPath(&mo, &ao); [18:32] Now that we have a media object and an audio output and have told the media object to spit out audio via the audio output, we only need to set a source and ask our nice media object to start playing the source. [18:33] As the template already includes some music (in particular Amarok's first run jingle in case anyone is interested) you can use the following: [18:33] mo.setCurrentSource(MediaSource("./first_run_jingle.ogg")); [18:33] mo.play(); [18:34] Putting the pieces together you should have something like this in your main.cpp: [18:34] MediaObject mo; [18:34] AudioOutput ao; [18:34] createPath(&mo, &ao); [18:34] mo.setCurrentSource(MediaSource("./first_run_jingle.ogg")); [18:34] mo.play(); [18:34] You can compile it using the commands mentioned earlier [18:34] qmake . && make [18:34] If all goes well you shoudl be able to run ./demo and hear music. I at least do \o/ === tubadaz is now known as tubadaz_away [18:36] Now let us dive into video playback. But I must warn you, it is going to be just as difficult as audio! :O [18:36] First we create a video widget (which is about the video version of audiooutput), then attach our media object to it. === tubadaz_away is now known as tubadaz [18:37] VideoWidget vw; [18:37] createPath(&mo, &vw); [18:37] Should you have worked with Qt before you will probably expect that VideoWidget is a QWidget and needs to be shown explicitly... and you are right. [18:38] Simply add [18:38] vw.show(); [18:38] So that is 3 more lines to get video. [18:39] Of course the amarok jingle is only audio, so that source is not going to be any good. I just get a black video window :( [18:39] But fear not, your well prepared instructor has thought of this problem and also bundled a video into the template :P [18:39] Simply exchange the previous line where we setCurrentSource() with this one: [18:39] mo.setCurrentSource(MediaSource("./konqi_ad1.ogg")); [18:40] Again run [18:40] make [18:40] and ./demo should now show a video window with a rather old advertisment for the KDE Desktop \o/ [18:41] But what is this? We are far away from 3 lines of code! Oh noes! [18:41] Maybe I was too daring, claiming such a silly thing :/ [18:41] Or not... :P [18:42] Please remove all that plunder we carefully pasted into the main.cpp and let us start from scratch. [18:42] Let us think about this again. [18:42] We want a video player, we want it to play a video, and we want it to show a video..... [18:42] maybe we should do it just like that. [18:42] VideoPlayer vp; [18:42] vp.play(MediaSource("./konqi_ad1.ogg")); [18:42] vp.show(); [18:43] Voila! A video player (with audio) in 3 lines of code :P [18:44] aha! [18:44] akshatj_ just complained that I cheated by hardcoding the URL. [18:45] I suppose it depends on the POV, I could add Qt magic to get a file open dialog or something and it still would be only 3 lines of phonon specific code ;) [18:45] Which was my original scope for the mission. [18:46] Well. [18:46] Qt to the resuce. [18:47] Let us be user friendly here. [18:47] Exchange our previous hardcoded media source with [18:47] MediaSource(QFileDialog::getOpenFileName()) [18:47] So that our vp.play warps into: [18:47] vp.play(MediaSource(QFileDialog::getOpenFileName())); [18:48] There. Still 3 lines and even with a file selector dialog at start up :) [18:48] * apachelogger hopes akshatj_ is happy now :) [18:49] Just to go one step further. In the future you will also be able to create a video player without any code *at all*. In about 30 seconds. [18:49] (i) http://www.youtube.com/watch?v=HrMSIrhFYlY [18:50] I hope I was able to interest you in Phonon and would be super happy to see your amazing new applications become even more amazing through superb multimedia :) [18:50] More information on Phonon is avilable in the Qt documentation [18:51] (i) http://doc.qt.nokia.com/latest/phonon-overview.html [18:51] As well as an overview of the in Qt included classes: [18:51] (i) http://doc.qt.nokia.com/latest/phonon-module.html [18:51] There are 10 minutes remaining in the current session. [18:52] ClassBot: Thank you, you are the sweetest :) [18:52] If there should be any questions, you now have <10 minutes to get them answered.... [18:53] Meanwhile I can also tell you a bit about future developments in Phonon. One of the amazing new things we will see appearing in (stable) Phonon hopefully before 2012 is audio and video capturing. [18:54] I have been playing around with this a couple of months ago and it is really easy to use and enables the creation of real fun applications I believe. [18:55] Also, so Google and KDE will, we will get superb QML support and simple encoding capabilities. [18:56] There are 5 minutes remaining in the current session. [18:56] It would also appear that there are rumors that a new version of the VLC backend component is just around the corner (but don't tell anyone ;)) [18:57] * apachelogger is out of things ot tell and his fingers hurt [18:57] I think we can wrap this up. [18:57] Thanks for reading and have a nice day :) [18:57] o/ [19:00] right [19:00] hello folks [19:00] so the plan for this session is to discuss integrating with the sound menu === ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu App Developer Week - Current Session: Integrating music applications with the Sound Menu - Instructors: ronoc [19:01] Logs for this session will be available at http://irclogs.ubuntu.com/2011/04/15/%23ubuntu-classroom.html following the conclusion of the session. [19:01] firstly I would like to point out that early in the O cycle we will make available via libunity the ability to integrate with the menu [19:02] this will mean developers will not need to worry about mpris interfaces and will just need to use this api [19:02] Can I ask which of you here are interested in implementing a compliant player from scratch ? [19:03] right so nobody so far, for Maverick we used libindicate for registration with the menu [19:04] i reworked this during the natty cycle so as a compliant mpris interface was all that was needed to integrate with the menu [19:04] but there is abit more involved than just raising an mpris interface [19:05] mpt went to great lengths to define a preferred workflow with players and the menu so as players can optin or opt out of the menu through their own UI [19:05] more info on all of this can be found on the wiki (wiki.ubuntu.com/SoundMenu) [19:06] each player should allow the user to to have the option to opt in or opt out. The functionality behind all of this is in the indicator-sound's gsettings [19:06] again info on all of this can be found on that wiki page [19:07] also there is a mailing list which you should join if you are developer interested in this [19:07] * ronoc digs up the lp page [19:08] https://launchpad.net/~indicator-sound-developers [19:09] I use this to announce to devs about upcoming changes [19:09] I feel though after this cycle must of the architecture is settled [19:09] so no major changes planned for now [19:10] back to what I was saying previously, one of my main reasons for moving away from libindicate and using a strictly dbus registration mechanism [19:10] was to reduce / remove any i-s related dependency for clients [19:10] i-s = indicator-sound [19:11] clients = players = banshee, rhythmbox etc [19:11] by doing this it means that players like spotify work seemlessly without any i-s specific work by the spotify team [19:13] furthermore the change to use gsettings as a way of recording blacklisted applications or applications which have previously registered means that the menu dynamically updates when some change has been wrote to the i-s gsettings [19:13] this did happen before with the maverick version [19:13] any questions anyone [19:13] anything in particular you would like me to go through ? [19:14] ok, so for clients,the main thing is to raise an mpris interface with the desktop entry properly filled in [19:15] the mechanism works so as when an mpris interface appears on the bus the service attempts to load the desktop file defined on the root mpris interface for the client [19:15] if all is good , then the player is inserted in the menu [19:16] the mpris people have been very supportive in redefining the spec over the last year which has really made this all work nicely [19:17] whether you support the playlist interface or not is determined by the service at start up by querying the interfaces listed by your player [19:18] if the service finds a playlist interface then its exposes the relevant dbusmenu items [19:18] any questions anyone ? [19:19] we had a scrub bar at one point but it was removed due to design clutter which in retrospect was a good call by mpt [19:20] the back end for pulse has been totally refactored this cycle and pretty confident that it should work well now (before it was a bit of fudge due to time restrictions) [19:20] also this cycle I introduce the voip slider [19:21] next cycle we will do work which allows for the voip slider to be added for applications that are not just necessarily voip apps [19:21] so gnome-sound-recorder running will trigger the appearance of the voip slider [19:22] i have done the work for this in a branch but won't merge until the O cycle begins [19:22] what else ? [19:22] i feel though now ( a year down the road) [19:23] the code and the architecture of the i-s is pretty stable/completed [19:23] obviously new features require new code but as the spec stands I have all angles covered [19:23] is there anything people would like to see added ? [19:24] I suppose 7pm in Europe on Friday isn't the best idea [19:24] although there must be some Americans here full of beans [19:25] As I expressed earlier one of the main reasons for the reworking of the registration architecture was to allow players to easily integrate [19:26] there are still some players though that do not integrate [19:26] totem being one [19:26] which I have not got around to writing [19:26] nothing ubuntu specific is required anymore just a compliant mpris interface [19:27] !q any questions [19:28] * ronoc is getting the hang of using the classbot [19:29] * ronoc waits for some interaction [19:31] don't really know what else really needs to be covered ... [19:39] Any question guys, please ping me [19:42] * ronoc enjoy Richard Skelton's latest release on type [19:51] There are 10 minutes remaining in the current session. [19:56] There are 5 minutes remaining in the current session. [19:59] Ok folks all done here I think [19:59] Good weekend all [19:59] thanks ronoc [19:59] Cheer james_w [20:00] cheers even === ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu App Developer Week - Current Session: pkgme: Automating The Packaging Of Your Project - Instructors: james_w [20:01] Logs for this session will be available at http://irclogs.ubuntu.com/2011/04/15/%23ubuntu-classroom.html following the conclusion of the session. [20:01] hi everyone [20:01] My name is James Westby [20:02] I'm here to talk to you about pkgme [20:02] who has a cool application that they would love to make available to people on Ubuntu? [20:02] who doesn't know how to go about packaging their application? [20:02] who knows, but doesn't want to be bothered with that? [20:03] if that is you then pkgme may just be the tool for you [20:03] pkgme's job is to take a look at your project and generate you some packaging for it that will likely work [20:04] it's not going to be packaging that is perfect, but it should at least be enough for you to put your application in an PPA and get people testing it [20:05] and you can then improve it as needed to suit your use [20:05] so, how does pkgme work? Is it magic? [20:05] no, it's not magic, it just has a few principles that it uses to make decisions [20:06] firstly, you probably wrote your application using some standard technologies/layout [20:06] e.g. you might have used autotools and so have a ./configure file [20:06] or you might have used python and so have a setup.py [20:06] or it might be a KDE application, a rails application, a cmake application, a vala application etc. [20:07] pkgme doesn't care what you used, as long as it has heard of it [20:08] pkgme has the concept of a "backend", which is a set of scripts that know how to deal with each of those classes [20:08] so the first thing it does is look at your project and decide which class it falls in to [20:08] if it is a python application with a setup.py then it will activate the backend that it has for that [20:09] if you are unlucky then it either won't be able to tell which class your application falls in to, or it won't have a backend for your class [20:09] if it's the former then you can file a bug on pkgme and we will fix it [20:09] if it is the latter then you can help by contributing the backend for that class. It's pretty easy, and we'll look in more detail at that later [20:10] akshatj_ asked: So that means no messing around with /debian, pkgme does the dirty job for you? [20:10] yep, that's its aim [20:10] chadadavis asked: So, others can provide other backends, for say Perl modules ? [20:10] exactly, we'll look at how to do this later, it's pretty easy, and the more backends there are the better [20:11] you could even write a backend for the exact way that you write projects if you like [20:11] but if you stick to something common, like perl, then the aim is to have the backend already there, so you don't have to care about any of this === akshatj_ is now known as akshatj [20:12] so once pkgme has decided which backend it will use for your project it goes ahead and writes out the debian/ directory with the needed files [20:12] let's take a look at it in action [20:12] so, pkgme itself isn't yet packaged, so we can test it out on itself [20:13] the first thing you need to do is install python-virtualenv, as we'll need that package [20:13] then you should run [20:13] bzr branch lp:pkgme [20:13] to get the code [20:13] once that is done then run [20:13] virtualenv virtualenv [20:13] (yes that is repeated) [20:14] that will create you a python "virtualenv" in a directory of the same name. We'll do this so that we don't interfere with the rest of your system while we are testing this [20:14] then run [20:14] cd pkgme [20:14] and you can look around the code [20:14] next run [20:14] source ../virtualenv/bin/activate [20:14] this activates the virtualenv that you just created [20:14] then run [20:15] python setup.py install [20:15] once that completes the setup is over, and we can start to test pkgme [20:15] pkgme works on the project that it finds in the current directory [20:16] and we are currently in the directory of pkgme [20:16] so it will work on itself here [20:16] if you run [20:16] PKGME_BACKEND_PATHS=pkgme/backends/ pkgme [20:16] it will think for a moment and then finish, and you will find a shiny new "debian" directory that wasn't there before, and it contains the packaging that pkgme just created for itself [20:19] is it any good though [20:19] ? [20:19] to try it out you can run "debuild -b -uc -us" [20:19] that will build the package, and here it spits out a .deb file that you could install [20:20] at this point you could build a source package and upload it to your PPA for others to try [20:21] now, pkgme is quite a young project, so this was a bit of a hassle, but soon it will be packaged and ready to go [20:22] and you would have just run [20:22] sudo apt-get install pkgme [20:22] pkgme [20:22] and it would have given you the packaging [20:22] we will likely add a mode to put the result in your ppa too [20:22] so it would be one command to install pkgme, and then one command to get your shiny new application in to a PPA so that people can use it easily [20:24] I think that's pretty cool, I don't know about you [20:24] we could even have a button on launchpad to do it all for you, so you would commit your code to bzr, push it to launchpad, and click the button [20:24] it doesn't get much easier than that, does it? [20:25] now, what happens if it doesn't work, or the packaging doesn't work quite right? [20:26] often this will be because you have done something that doesn't quite line up with the standard way of doing things in your class of project [20:26] because this is your project you may be able to easily change that [20:26] plus there will be a way eventually for you to customise the packaging in certain ways for when you can't really change to match the standards [20:27] but we want to learn more about those cases before we decide how to implement that [20:27] so give it a try on your own projects and let us know how it goes [20:27] there is a #pkgme irc channel that you can join [20:28] or there is a mailing list as part of the https://launchpad.net/~pkgme-devs team [20:29] so, any questions at this point? [20:32] chadadavis asked: This reminds me of Launchpad recipes. Are there plans to develop these in parallel. It would be cool if I could use pkgme locally to test things and then let launchpad recipes take care of daily builds. [20:32] funny, I worked on Launchpad recipes too :-) [20:33] I would like to have them working together, but it's very early days [20:33] recipes are great, but they still require someone to create the packaging [20:33] having a launchpad feature to run pkgme and put the result in a branch, and then create a recipe to build it every day would be great [20:34] I'm pretty sure I can convince the Launchpad developers to implement it if we can show the pkgme works well for a lot of people, so I'd love your help to make sure it does [20:35] stefano-palazzo asked: is there an example hello world program in Python, with all of the setup.py business set up, that I can download? [20:35] I don't know actually [20:35] I think if you use quickly it creates one for you [20:36] http://packages.python.org/an_example_pypi_project/setuptools.html might be of help [20:37] akshatj asked: Would it have user input for descriptions? The current automatically generated ones are horrible [20:37] you are right, they are horrible :-) [20:37] I would like to have the ability to specify them somehow, but we haven't decided how that should work yet [20:37] if you have an opinion then please let us know [20:37] the mailing list I mentioned at https://launchpad.net/~pkgme-devs would be a great place to do that [20:40] so, has anyone tried pkgme on their own projects yet? [20:40] if you do [20:40] ls pkgme/backends [20:40] you will see that there are currently only "python" and "vala" backends implemented [20:41] chances are that your needs aren't covered by those two [20:41] we would love you to help by contributing a backend [20:41] they are easy to write, but it's hard for us to know each language/project class well enough to write them ourselves [20:42] you don't need to know anything about packaging to write one, we take care of all those parts :-) [20:42] what do you do if you want to write a new one? [20:42] take a look at http://pkgme.net/doc/backends/index.html [20:42] you can start right now in fact [20:43] bzr mkdir pkgme/backends/mybackend [20:43] the first thing we write is a "want" script [20:43] this is used to decide if your backend can handle a particular project [20:43] in this script you take a look at the files in the current working directory and decide if you know what to do with them [20:44] so, if you want to do a perl backend, then it will likely do something like [20:44] if [ -f "Makefile.PL" ]; then [20:44] echo 20 [20:44] fi [20:45] if you want to a a java/Ant backend then you would do something like [20:45] if [ -f "build.xml" ]; then [20:45] echo 20 [20:45] fi [20:45] I don't really know, whereas you do, which is the point of this backend split in pkgme :-) [20:46] chadadavis asked: Now, if I want to make a backend, it will have certain dependencies, specific to it. So, will the backends be packaged separately. E.g a Perl backend might require many perl modules that others dont' need to install pkgme. [20:46] good question. [20:46] it probably makes sense to package them separately, and have a metapackage that pulls in all/most of them by default [20:49] right, back to our backend [20:50] the way pkgme interacts with a backend is to ask it a bunch of questions, each of them to get one piece of information about the project [20:50] what is its name? [20:50] what version is it? [20:50] what dependencies does it have? [20:50] what is its description? [20:50] the backend is supposed to make its best attempt to answer, but if it can't answer a certain question then pkgme will try and cope [20:51] how does it ask these questions? [20:51] take a look at the vala backend [20:51] There are 10 minutes remaining in the current session. [20:51] you will see a bunch of files with names like "package_name" [20:51] they will be run by pkgme to get the information [20:52] so you can create pkgme/backends/mybackend/package_name and echo "myproject" in there, and pkgme will use that as the name [20:52] obviously a backend would usually look at the project files in the current directory to find out the name [20:52] see the bottom of http://pkgme.net/doc/backends/index.html for the information that pkgme might ask about [20:53] the scripts you should create are named the same [20:53] as I'm almost out of time, I'll leave it there [20:53] any further questions [20:53] after the session if you have questions then there is the #pkgme irc channel [20:54] and the mailing list at https://launchpad.net/~pkgme-devs [20:54] spend one hour writing a pkgme backend, and never have to care about packaging again! :-) [20:56] There are 5 minutes remaining in the current session. [20:58] thanks everyone! [20:58] please help it succeed by testing and giving feedback, and contributing backends [20:58] it won't succeed otherwise, and you'll be back to creating packaging yourself for all your applications :-) [20:59] alright, thanks james! [21:00] now for some unity! === ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu App Developer Week - Current Session: Unity Technical Q&A - Instructors: DBO, jcastro [21:01] ok so does the bot kick in or what? [21:01] oh well that answers that! [21:01] Logs for this session will be available at http://irclogs.ubuntu.com/2011/04/15/%23ubuntu-classroom.html following the conclusion of the session. [21:01] welcome everyone to the Unity developer Q+A with me and Jason Smith [21:01] Howdy folks! [21:01] I'll be fielding the questions [21:01] and then Jason will answer them [21:01] like a boss [21:02] so while you think of questions, jason why don't you tell us about some of the cool things you can do in Unity. [21:02] So some of our favorite new features in Unity this cycle are lenses, and the new libunity launcher API, I will touch on lenses first [21:03] Lenses are bits of pluggable UI used to mash up websites and other applications into the dash [21:03] For example: http://i.imgur.com/yNjY0.jpg [21:03] creating a lense (like the one shown above) takes very little time :) [21:04] james_w asked: what is the dee thing that I keep hearing about? [21:04] libdee is a low level dbus based library that is used to keep tables of data in sync between two remote objects [21:04] basically libdee provides a stable and fast data model over dbus that abstracts away the annoying syncronization issues [21:05] libdee is used in unity to keep places daemon result data up to date in the dash's lenses [21:05] I hope that answers your question [21:05] another piece of API we have created this time around is the libunity launcher API [21:06] this API allows you to modify existing launcher icons in a very simple manner. Currently it supports adding progress bars, count tags, and setting urgency hints to a launcher icon [21:06] Here's an example of Thunderbird integrating with Unity via the launcher API: http://vimeo.com/21027015 [21:07] Additionally through libunity, application authors are able to add quicklists to their applications, extending existing functionality and providing more right click options [21:07] http://ubunturocking.wordpress.com/2011/04/12/dynamic-quicklists-in-unity/ [21:08] here's an example of how app authors can generate quicklists from their applications [21:08] saimanoj12 asked: Why are these links not clickable? [21:08] because your IRC client has failed you? [21:08] :) [21:09] honestly I dont know :) [21:10] MeanEYE asked: Will there be a possibility to add more than one progress bar to dash using API? [21:10] Currently this is not possible [21:11] I am not aware of any plans to expand this functionality either [21:11] I think the general idea is to keep the design as simple as possible. We dont directly indicate what the progress bars are for, therefor having two would not directly inform you which progress bar belongs to which task [21:11] MeanEYE asked: Did you plan on adding emblems to counters? For example email client could display how many messages needs to be send and how many unread. This can get UI a bit clunky, maybe putting those in tooltip. [21:12] We already do that [21:12] libunity::LauncherEntry has a count member variable, that when set results in a count being displayed on the launcher [21:13] crazedpsyc asked: in his session, kamstrup said progress bars and badges are being, or have already been removed because the design team voted against them. Is this true? [21:13] Progress bars have been kept, badges were removed, count is still present [21:13] and being able to set urgency status was also added at the same time [21:14] MeanEYE asked: Did you consider making minimum width of indicator items? For example bluetooth icon is always narrow which can be a pain to click if you are using touchpad or something like that. [21:14] Yeah, that bug has reported to Neil, a fix should arrive on your system soon :) [21:14] stefano-palazzo asked: Are there plans to implement counts et al for Places this cycle? [21:15] Currently there are no plans to implement this, it would require changes to the libunity protocol and we are well passed freeze for that. On a design end I am not sure they want to see counts there anyhow [21:15] Though I can see where you might want them, we'll see where next cycle goes :) [21:16] crazedpsyc asked: Does the dash file search use tracker? Or what? [21:16] It uses zeitgeist actually, we dont currently use tracker and dont have any plans to in the future (so far) [21:17] Though there are obvious issues with zeitgeist right now (sometimes the results are less than optimal) and we are hoping to resolve that in the future [21:17] MeanEYE asked: How well Unity supports multiple-displays? [21:17] I use unity in twinview [21:17] it's an area we spent some time on [21:18] what happens currently is the extra monitor also has a panel [21:18] and the appmenu and indicators also show up there [21:18] in the past the menus and stuff were on the other monitor [21:18] so it made it a loooooong journey to the menu when using a mouse [21:18] now each panel gets a menubar [21:18] I think it's much better than what we had in gnome 2 [21:19] since we now have a panel that isn't so crufty [21:19] when you plug in an external monitor it doesn't jumble your indicators anymore [21:19] crazedpsyc asked: Are there any plans to at least have the option of a moveable launcher (maybe drag, or just align-to-edge)? [21:19] Currently there are no plans to implement a movable launcher [21:20] however we have talked about the need to support RTL languages [21:20] and this would likely require the ability to place the launcher on the right [21:20] combine this with the newly landed edge reveal option [21:20] and we will see what the future holds :) [21:20] MeanEYE asked: Global menu seems slow when it comes to drawing. Also it fails to draw menu items with custom widgets in it. Are there plans to fix this? [21:21] The biggest issue with this is that the widgets have to be communicated over dbus [21:21] while dbus is flexible, we have not fully implemented everything you can dream up yet (obviously) [21:21] most of the normal cases, and even some of the more abnormal ones have been covered [21:21] as time goes on I hope this support will grow and continue [21:22] saimanoj12 asked: Is unity same as gnome3? [21:22] Unity is based on top of a mixture of GNOME 2 and GNOME 3 technologies right now [21:23] while it uses gdk/glib and gtk from GNOME 2, it also uses gdbus and dconf, which are largely used within GNOME 3 [21:23] when GNOME 3 lands in full next cycle, we will be ready to adapt to any new technology changes [21:24] we will be migrating all of our GTK/GDK code over to GNOME 3.0 technologies for Oneiric :) [21:24] crazedpsyc asked: What language(s) [is/are] the launcher specifically written in? What modules or libraries does it use? [21:25] The launcher, dash, and panel are all written in C++ [21:25] we use a base opengl library called nux to provide widgets [21:25] nux is also C++ based [21:25] our places (the files and applications place) are written in vala [21:25] some third party places (the reddit place and askubuntu) are written using python [21:26] Titeuf_87 asked: currently I see three different kind of scrollbars: does the new kind of "small" scrollbar need to be implemented on a per-app basis? [21:27] It is implemented by the theme engine actually [21:27] currently we are using a whitelist to enable it in well tested applications where we are sure it does not cause bugs [21:27] I am not sure if the whitelist will remain through until release, or if we will see a global enablement [21:27] Obviously we see considerable value in having a consistent visual look across all scrollbars [21:28] MeanEYE asked: At the moment Unity is not allowing amount of window shadow to be changed. Is this on purpose? [21:28] I think this is largely due to missing support [21:28] we just didn't have time to turn this into a configurable size option [21:29] gmb2001 asked: I've noticed today that when double clicking the globalmenu that the window restores from being maximized, but off to the right. Is this a known bug? [21:29] It is now! [21:29] I haven't heard that reported before [21:30] I will make sure sam gets the message :) [21:31] MeanEYE asked: Can we expect PPA or something like that for Unity in Natty during the Oneric development cycle? [21:31] I am not sure to be honest [21:31] we have always maintained a daily PPA [21:32] and I imagine weekly releases will be available for Natty until library version delta's become too big [21:32] and we are no longer able to support Natty [21:32] FYI: https://launchpad.net/~unity/+archive/daily [21:32] (that will happen probably in the first couple months) [21:32] once we port to GTK 3, it will be much harder to backport [21:32] crazedpsyc asked: What library did Unity's launcher use to get an average color out of each icon? I tried to do something like this but it resulted in most of my buttons being black or grungy [21:33] So I wrote that actually :) [21:33] The original algorithm I wrote for Docky, we them ported that over for usage in Unity [21:34] it basically loops over each pixel and adds up the R/G/B and biases against desaturated pixels (and obviously gives little weight to transparent pixels too) [21:34] MeanEYE asked: Have you considered a development model for Unity that resembles one of Google Chrome, having stable and development branch, releasing as often as possible? [21:34] we have been doing weekly releases for the passed 6 months [21:35] I am not sure we are going to move a chrome-esque development model [21:35] I actually rather doubt it [21:37] MeanEYE asked: Few days ago I tested Unity on my laptop connected to WiFi. Whenever I clicked "start" button (or whatever you call it) I noticed few seconds before shell became responsible again. Will there be an option for us to disable lenses and how does Unity handle lenses that require internet on disconected machine. [21:38] Lenses are totally async (they are different processes) and should not cause the shell to freeze while waiting on a lense [21:39] if you are experiencing a freezing type issue, there is a fix for these kinds of issues going into todays compiz release [21:39] you may wish to check that out :) [21:39] if that doesn't help, we love bug reports (well not really, but we read and respond to them) [21:41] davidcalle asked: Are you planning a way to bookmark some searches in lenses? [21:41] No, but as a personal note, I think its an awesome idea [21:43] Titeuf_87 asked: are lenses a bit comparable to what was the deskbar-applet in older versions of Gnome? [21:44] sort of [21:44] they are searchable and stuff [21:44] I think they're more equivalent to firefox custom search things [21:44] but at the OS level [21:44] so like you know how some websites let you install their search engine in firefox [21:44] lenses are kind of like that [21:45] so I can just hit the windows key, type "rick roll" and the youtube lens would return a list of videos to me [21:45] what makes lenses more powerful is that we can also connect to applications. [21:45] so we can search things on your PC for you as well as the web [21:46] MeanEYE asked: What's the reason behind making Launcher menu with custom graphics and not using system menu style? [21:46] Short answer: that is how design wanted it [21:46] Long answer: we wanted something that was flexible, fast, and would look exactly how we wanted it to [21:47] (not a very long, long answer) [21:47] crazedpsyc asked: Will the top panel ever get the option to autohide? I have all my AWNs autohidden or over windows because my screen is so small vertically... [21:48] so the awesome thing about Unity is how much vertical it saves you without having to resort to autohiding [21:48] by embedding the decorations into the panel when a window is maximized, you gain as much vertical space as you would from an autohiding panel [21:48] combine this with the global menus, and you gain 24 more pixels or so on top of that [21:48] but [21:49] no, we dont have any plans to autohide the panel [21:49] MeanEYE asked: At the moment if you highlight an item in dash using your keyboard and then move your mouse over a different item bot of them will be highlighted in the same way. Will this change, since it can bring confusion?! [21:49] Yes that is a bug [21:49] we will fix it (I hope) for natty [21:50] soreau asked: What should we tell users that just want their old compiz+gnome-panel back? Is there a non-unity session selectable from gdm? [21:50] there is an ubuntu classic session in gdm [21:50] those users will be well serviced by that! [21:50] soreau asked: Is there a way to select non-unity session by default? [21:50] after you select the classic session once it will remain the default from then on [21:51] MeanEYE asked: Now that Unity is Compiz based, will Canonical pay more attention to default eye candy? (more of a general question actually) [21:51] yes, the compiz defaults will be under constant review and scrutiny [21:51] this cycle we have made as many changes as possible that we thought would improve the user experience [21:52] There are 10 minutes remaining in the current session. [21:52] Now that you all have voice [21:52] let the free for all begin! [21:52] stefano-palazzo asked: we can assume that LibreOffice will be integrating its menu into the panel before the release, yes? How hard is it for a big app, especially if it's not written using GTK, to make its menu compatible with Unity? === davidcalle is now known as davidc3 [21:52] Its in universe, but it's not shipped by default [21:52] probably ready for 11.10 [21:53] like with any application that doesn't use the standard toolkit, it can be difficult to fully integrate with the OS [21:53] htorque asked: the lenses and the workspace switcher seem to be quite important launcher items. why are they placed at the lower end of the launcher, where they are likely to get folded/expanded off-screen instead of having them at the top (or even movable)? [21:54] As important as they are, we feel they are not as important as your favorite applications [21:54] However, I think that considering the folding behavior, this will be an area of attention in the next cycle [21:54] finding a way to make sure lenses and workspace switcher are as easy to access as anything else [21:55] crazedpsyc_ asked: But will GTK apps automatically use the global menu? [21:55] yes, unless they do something really strange [21:55] soreau asked: What is the key purpose behind lenses? [21:55] lenses are designed to give access to applications, files, and web resources inside of the Unity shell [21:56] lenses are extensible, which is quite nice for third party developers [21:56] There are 5 minutes remaining in the current session. [21:56] they basically serve to replace the existing gnome menus [21:56] (and much more) [21:56] MeanEYE asked: Can we expect an option to hide unusable items from Launcher? [21:56] Not this cycle, maybe next [21:56] we'll see :) [21:56] maxb asked: Is more configurability (especially of auto-hide / edge-reveal timeouts) in the short term plan? [21:57] Edge reveal timeout may receive some tweaking this cycle, which may result in an option popping up in CCSM, we'll see [21:57] we are not planning on adding options explicitly however [21:58] ok, that's about all the time we have [21:58] whew, we really went through a ton of options. [21:58] I mean questions. [21:58] thanks everyone for asking so many questions! [21:58] and now we're on to lightning talks! [21:59] okay, so for anyone who's not familiar with what a lightning talk is [22:00] it's a very quick presentation, where the speakers only have about 5 minutes to say everything they have to say [22:00] they've become quite popular at conventions [22:00] for this session, we have people who are going to give a quick overview of some program they are involved in, so you can see what small projects are out there that you might want to get involved in [22:01] as always, you can ask questions in -classroom-chat === ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu App Developer Week - Current Session: Lightning Talks - Instructors: stefano-palazzo, duanedesign, davidc3, kirkland, MeanEYE, muesli, nhandler [22:01] Logs for this session will be available at http://irclogs.ubuntu.com/2011/04/15/%23ubuntu-classroom.html following the conclusion of the session. [22:01] but remember, they only have 5 minutes, so don't expect them to answer everything [22:01] so, without wasting any more of their preciouos time [22:02] our first speaker is sefano-palazzo, talking about StackExchange App [22:02] Hello, I'm Stefano - I'll be talking about StackExchange [22:02] Stack Exchange is a network of question and answer websites [22:02] it includes sites like http://stackoverflow.com, http://serverfault.com, and of course [22:02] http://askubuntu.com - the best place to ask questions and get answers about Ubuntu [22:03] I've also written the Ask Ubuntu Lens for Unity, [22:03] http://askubuntu.com/questions/31712 [22:04] The Lens is designed to work with Ask Ubuntu, but it also supports every other Stack Exchange site [22:05] If you're interested in geographic information systems, guitars, maths, star trek, ... there's probably a site for you. [22:05] If you're running Natty Narwhal, you can add our Team's PPA to install the lens: https://launchpad.net/askubuntu-lens [22:05] It also contains stack applet; A little, App Indicator sized utility that keeps you up to date with your profile on any stackexchange site - if you're already an Ask Ubuntu user [22:06] It's written by George Edison, and, if you're interested in what's happening in your Stack Exchange account, this app is for you [22:06] And if you don't know what Stack Exchange or Ask Ubuntu are, [22:07] I urge you to check them out. They're the best place on the web if you just want to get an answer to your question. Jorge has recorded a screen cast providing a gentle introduction: [22:07] http://blip.tv/file/4909346 [22:08] That's about all I've got - if you're interested, join Ask Ubuntu (you don't need to register an account). And if you want to talk to me about developing Apps that integrate with Stack Exchange sites, I'm often in #ayatana, or the Ask Ubuntu chat at http://chat.askubuntu.com [22:09] thank you very much for your time :) [22:09] mhall119 asked: does it search every stackexchage site by default, or do you have to enable the ones you're interested in? === tubadaz is now known as tubadaz_away [22:10] It searches Ask Ubuntu by default, but if you want to search on any other site, you can use special modifers. A typical search might be "@guitars telecaster sustain", or "@programming open source license" [22:11] MeanEYE asked: Will your lense be integrated with default Ubuntu installation? [22:11] the modifier is the first part of the site's URL, what ever comes before .com [22:11] No, then lens will not be part of the default installation, it will in all likelihood appear in the Independend category of the software centre [22:12] alright, thanks stefano-palazzo! [22:12] next up is duanedesign with CLI Companion [22:12] take it away duanedesign === tubadaz_away is now known as tubadaz [22:14] okay, we'll try him again later [22:14] davidc3 is next with Unity Book Lens [22:14] davidc3: ready? [22:14] Yes :) [22:14] the floor is yours [22:15] Hello, I'm David and I'm going to introduce you to my pet project: the Books Lens. [22:15] There are a lot of free online libraries, such as Google Books or Project Gutenberg, and as a heavy books reader, I wanted to find a way to search them all at once. [22:15] More precisely, my goal was to reduce the time from searching to reading: [22:15] To put it another way: type, click, read a book. Like any document on your computer. [22:15] The project started when I found stefano-palazzo's first commits for the askubuntu lens. It presented me a simple way to get results from the Internet displayed in Unity, in Python. [22:16] Why in Python? Because I'm not a developer, because I didn't know any more code than a few terminal tricks and because "everyone" says Python is easy... [22:16] So it was time to get my hands dirty and I started to blindly modify some values and experiment on stefano's code :) [22:16] I also found the Google Books JSON API documentation to be very helpful. [22:16] By the way, an API is a set of rules to ask other services questions and to interprate the answers and JSON is a language easy to interprate in Python. === erichammond1 is now known as erichammond [22:17] A few hours later, I had a working lens! You could search every books indexed by Google, and authors, and subjects! The power of Google in the palm of my hand! http://img39.imageshack.us/img39/8454/screenshot4xn.png [22:17] But... my web browser was just a click away and it could do all of this much faster and better... [22:17] So, it was time to had features: [22:17] The first one is called "Focused Author". When you get search results, the lens uses the first author it finds, and presents other books from her or him. === crazedpsyc_ is now known as crazedpsyc [22:18] It does work on most searches and find authors from Sophocles http://img861.imageshack.us/img861/7618/screenshotss.png [22:18] ...to Jono Bacon! http://img200.imageshack.us/img200/7219/screenshot1sf.png :) [22:18] Another feature is a localization trick: the lens finds out your session's language and tries to present you books in your language first. [22:18] What's coming next: [22:19] * More focus on free books! (the actual "Free Books" search is clunky, but it will eventually be default). [22:19] For now, most of the time, instead of: "Type, click'n'read", it's: type, click and "an Amazon link, really?" [22:19] * Search in Project Gutenberg and Forgotten Books (with help from Blekko, a really nice search engine) [22:19] * Special searches, like "50's sci-fi"! [22:19] * Smart pre-population via Zeitgeist: you are looking at a web page or some other document, then open the lens: without needing you to type anything, it finds out what you are doing on your computer (using the title of the most recently accessed document) and present you related books. [22:20] How you can help: [22:20] Add the PPA: https://launchpad.net/~davidc3/+archive/books-lens [22:20] Try it and report bugs: https://bugs.launchpad.net/unity-books-lens [22:20] That's all, if you want to talk to me about this project, I'm often in #ayatana (nick davidcalle), thank you for your time! :) [22:21] Any questions? [22:21] MeanEYE asked: After finding a book using Unity, will default book reader application open or just URL? [22:22] For now, just URL, but the ultimate goal is to open it in the appropriate reader. [22:22] Or device! [22:22] Project Gutenberg makes it very easy to download things in kindle format, for example. [22:23] More questions? [22:23] alright, thanks davidc3, I'm sure i will get less work done in Natty now ;) [22:23] up next is kirkland and Bikeshed [22:23] Thanks mhall119 :) [22:23] mhall119: thanks [22:24] right, so Bikeshed ... [22:24] Bikeshed was the answer to a problem I've struggled with for some time now [22:24] I had a growing number of really cool, convenient scripts stacking up in my own ~/bin directory [22:24] many of which might be useful to other people [22:25] and so I tried to contribute them to upstream projects [22:25] but many of these upstream projects were old, or stagnant; others were new and active, but just uninterested [22:25] more importantly, the actual implementation of a few them them were debated endlessly [22:25] this gave rise to the Bikeshed project [22:26] where the term "bikeshedding" has become very commonly used in modern open source development circles [22:26] http://en.wikipedia.org/wiki/Parkinson%27s_Law_of_Triviality [22:26] ^ if you don't know what it means to "bikeshed" [22:27] so anyway, I created the "Bikeshed" project in Launchpad, as a breeding ground for new/interesting/even-trivial-but-helpful scripts and programs [22:27] it's sort of an incubator [22:27] or even an orphanage [22:27] a place I often put things that other people might use, until it finds a more permanent home [22:27] some of the things to land in Bikeshed ... [22:28] most recently, "apply-patch" [22:28] which is a wrapper for patch, that can retrieve patches via URL, and automatically detects the strip-level [22:29] bzrp is a wrapper for bzr, that puts the output through a pager if it's more than one screen (sort of like git does automatically) [22:29] col1 .. col9 is a really slick wrapper that does the equivalent of "awk -F"$something" '{print $N}' [22:29] dman remotely retrivies manpages from manpages.ubuntu.com [22:30] wifi-status is a watch wrapper that monitors your wireless connection in real time [22:30] and so on [22:30] a few things have "graduated" out of bikeshed to be projects of their own [22:30] ssh-import-id $LAUNCHPAD_USER is a cool tool that securely retrieves a public SSH key from Launchpad and installs it to the authorized_keys file of the system [22:30] (really useful in cloud computing circles) [22:31] and the errno utility was one of the proverbial straw that broke the camels back, and inspired me to create bikeshed [22:31] errno searches Linux error numbers, names, and descriptions [22:32] there's a few more [22:32] but I should probably save a few minutes for quesitons [22:32] questions, even [22:32] my classbot fu is out of date [22:33] MeanEYE asked: Do you have any graphical part of application which can help us easily install/remove scripts? [22:33] MeanEYE: hmm, currently every thing is command line only [22:33] MeanEYE: and bikeshed itself is kind of a mish-mash of random scripts [22:34] davidc3 asked: Do all the scripts have man or help? And do you have some wiki page where we can learn a bit more about them?? [22:34] MeanEYE: part of the process of "graduating" a script out of bikeshed means making it into its own package/project, which is then installable from the Ubuntu Software Center [22:34] davidc3: absolutely! every script/program MUST have a manpage to land in bikeshed :-) it's my most important requirement [22:34] davidc3: the best place to learn is http://blog.dustinkirkland.com/search/label/Bikeshed [22:35] alright, thanks kirkland! [22:35] mhall119: thank you! [22:35] so everyone dig around in your ~/bin and see what you can toss in the shed [22:36] Up next is MeanEYE with his app: Sunflower FM! [22:37] Oh, is it me already. Great! [22:37] Hello everyone. [22:37] My name is Mladen, although using my nick is just fine. [22:37] I'll use this short time span to present you with Sunflower. [22:38] Sunflower is twin-panel file manager based on GTK+. [22:38] Idea is to create keyboard driven file manager that seamlessly integrates into Gnome desktop environment (and Unity of course). [22:39] So, without dragging this more than I should... I'd like to give you a few screenshots of my little program in action. [22:39] http://img231.imageshack.us/img231/2310/screenshot3vk.png [22:39] http://img560.imageshack.us/img560/834/screenshot1pl.png [22:40] http://img855.imageshack.us/img855/3793/screenshotvw.png [22:40] I tried to be creative and add many options but at the same time keep user interface clean and organized. [22:41] I believe many of you already used some twin-panel file manager like Total Commander, Gnome-Commander, Midnight Commander, etc. [22:42] Since I like talking with people, feel free to ask questions. [22:42] For impatient people you can download it from: http://code.google.com/p/sunflower-fm/ [22:43] mhall119 asked: You said it's keyboard controlled, does that mean everything had a keyboard shortcut? [22:43] Yes, not everything but most commonly things do have them. Those that don't have shortcuts can be accessed using a keyboard. [22:44] One nice example of this is when you are working with files and you need a terminal in that very directory, all you need to do is hit CTRL+Z and program will open terminal with that path. [22:45] Program is also multi-threaded so if you have more than one core on your processor program will use this. [22:45] mhall119 asked: Is this in Universe or a PPA? [22:46] No, not at the moment. It's still in early alpha stage. [22:46] Although there are some people who are using it heavily without any issues. [22:46] okay, if anybody has any further questions for MeanEYE, feel free to ask [22:47] but now it's time for us to move on to muesli and Tomahawk Player [22:47] If someone is willing to join and help package it or translate it, just refer to that link I gave you and I'll help! [22:47] Ok, thanks every one! [22:47] Good evening! My name's Chris, I'm the lead developer of a young project called Tomahawk, a "social" music player written in C++ / Qt4 [22:47] I know what you're thinking "great, exactly what the world needed, yet another music player", but bear with me for a second. Tomahawk handles your music collection differently than any of the players that you have used so far [22:48] Tomahawk allows you to connect to your friends' music collections via Jabber or Twitter - it simply re-uses your social graphs and tries to find contacts that are currently running Tomahawk. Once you're connected, you can stream all their music and even play your friends' playlists [22:49] Whenever you load a playlist, Tomahawk automatically determines the best source for each of the playlist's tracks: If you have a copy of the track locally it'll prefer that, otherwise the track will get streamed from one of your friends - on demand and automatically. It just plays [22:50] But what if you load a playlist and none of your friends is currently online - and you don't have a local copy of a track either? [22:50] Tomahawk tries to help out and will also find music all over the internet for you. It is extensible by so-called resolvers, which are little plugins or scripts running in the background. They try to find a streamable url for any song you wanna listen to [22:50] Whether it is available on Spotify, Youtube or found on an MP3 blog by Skreemr. It just finds it and plays it [22:51] There are 10 minutes remaining in the current session. [22:51] We go even beyond that and try to utilize existing metadata from public APIs (like Echonest or Last.fm). Tomahawk can automatically prefill your playlists by a variety of criteria, so you'll always find a set of tracks that fit your current mood [22:51] Join us on channel #tomahawk and we'll get you started with not only Ubuntu packages, but also Win32 and OS X binaries [22:52] Check out our blog for a few how-to and demo videos: http://tomahawk-player.org/blog/tips_tricks/stations and follow the project on GitHub: https://github.com/tomahawk-player/tomahawk [22:52] mhall119 asked: How does it know which of your friends is using it? [22:53] That depends on the connectivity (called SIP) plugin you're using. When it comes to Jabber, it'll use a specific resource, so it can identify other Tomahawks in your contact list. [22:54] The Twitter plugin will look for an invite message, which you can either send to all your followers or just a handful of people [22:54] mhall119 asked: Have you considered the legal impact (copyright) of streaming music to your friends? [22:55] Yes, we have thought and written about this situation here: http://tomahawk-player.org/legal [22:55] james_w asked: does it stream music over twitter? [22:56] No, it won't use Jabber or Twitter to stream the music. Those protocols are only used to initiate a connection. From there on it's a direct connection between two Tomahawks. [22:56] thanks muesli, this certainly is a new take on music players! [22:56] Thanks for your time, hope to see you on #tomahawk [22:57] alright everybody, wrapping up this session and this week is nhandler and our very own lovable, huggable, perl-icious ClassBot! [22:57] Hello everyone. ClassBot is an IRC bot I wrote a while ago to help with running classroom sessions in #ubuntu-classroom [22:57] We had a brief lightning talk at UDS given by cjohnston, but no IRC talk was ever given [22:58] Some information about ClassBot is available here: https://wiki.ubuntu.com/Classroom/ClassBot [22:58] As you probably have seen, classbot has been working tirelessly this past week to ensure the /topic stays updated and that instructors get voiced and devoiced [22:59] All of this information comes from of Classroom calendar: http://people.ubuntu.com/~nhandler/classroom.html [22:59] ClassBot also helps instructors keep track of questions. You can currently get the next question (if you are an instructor or helper) with: /msg classbot !q [23:00] You can then choose to have the question go to the classroom (!y) or reject it with (!n [optional comment]). [23:01] One probably lesser known feature of ClassBot is that it is responsible for keeping the classroom identi.ca feed up-to-date: http://identi.ca/ubuntuclassroom . You can subscribe to that feed to always know when a session is goin on. [23:01] mhall119 asked: When will the OOP re-write be ready?\ [23:02] mhall119 is asking about a major re-write I am doing to make it easier to add a few features to ClassBot. I've gotten a bit behind due to some real life work, but I hope to start working again after the second week in May. It should be done and ready to launch in #ubuntu-classroom at the end of May. [23:02] MeanEYE asked: Does it respond to CTCP. Might be handy so you don't have to switch tabs when getting next question and similar. :D [23:03] MeanEYE: Switching tabs all depends on your IRC client. For example, I have my client set to show PMs in the current window (rather than creating a new query window). [23:03] CTCP messages would be a bit inappropriate to use for something like this. [23:03] So in short, it does not currently respond to them and it probably will not gain that feature. [23:03] MeanEYE asked: Did you consider making classroom topic to be displayed before other information? In many clients you have to scroll to find the rest of the text. [23:05] If by Classroom topic you mean the current session information, I believe we decided to put it on the end to ensure that the information at the beginning always shows up and won't get cut-off due to a lot of instructors and a long session title/event name. So yes, we considered it, but we decided on the current layout (note that it is easily configurable though) [23:06] There are 5 minutes remaining in the current session. [23:06] Any more questions? [23:08] If you ever have any issues using classbot during a session, I encourage you to stop by #ubuntu-classroom-backstage or ask one of the people listed on the calendar as a helper. They will usually be able to help you or point you in the right direction [23:08] Finally, if anyone is interested, here is an old set of slides I prepared to explain classbot: http://people.ubuntu.com/~nhandler/myslides/ [23:09] Well, this conlcudes my lightning talk, the lightning talk session, and Ubuntu App Developer Week. [23:09] I hope everyone has enjoyed the lineup of sessions and learned a lot [23:10] If you ever wish to lead a session (or have a suggestion for a session you would like to see), please do not hesitate to email ubuntu-classroom@lists.ubuntu.com or stop by #ubuntu-classroom-backstage [23:11] Logs for this session will be available at http://irclogs.ubuntu.com/2011/04/15/%23ubuntu-classroom.html [23:11] Finally if you missed a session, logs are available on the wiki: https://wiki.ubuntu.com/UbuntuAppDeveloperWeek [23:11] Thanks for coming everyone === ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || === davidc3 is now known as davidcalle === tubadaz is now known as tubadaz_away === tubadaz_away is now known as tubadaz