== App Developer Week -- The Making of Unity 2D -- Kaleo -- Tue, Sep 6th, 2011 == {{{#!irc [17:00] Kaleo, as soon as the Classbot kicks in with the intro, the floor is yours! [17:00] Logs for this session will be available at http://irclogs.ubuntu.com/2011/09/06/%23ubuntu-classroom.html following the conclusion of the session. [17:00] dpm: thank you David [17:01] dpm: thank you everyone for joining this session [17:01] dpm: My name is Florian Boucault [17:01] dpm: and I am one of the software developers behind Unity 2D [17:02] dpm: I would like that session to be as interactive as you guys would like [17:02] dpm: so don't hesistate to ask any question at any time [17:02] (and I'll drop the dpm :)) [17:02] Unity 2D is essentially an implementation of the Unity user interface using Qt and QML [17:03] it reuses the same backend technologies used in Unity 3D [17:03] and intends to provide a UI that matches Unity 3D [17:03] the main goal of Unity 2D is to run on platforms that do not provide accelerated OpenGL [17:04] it also simplifies the development of the shell UI quite a bit [17:04] it is made up of 4 UI components [17:04] 3 of which you can see on the following diagram: [17:04] http://people.canonical.com/~kaleo/classroom/unity_2d_wireframe.png [17:05] - the app launcher on the left [17:05] - the top panel with the application menu and the indicators [17:05] - the dash that is a UI to essentially search for content [17:05] - and the one not in the diagram, the workspace switcher [17:06] the workspace switcher allows user to switch between workspace, applications and windows [17:06] right now these 4 components are separate programs that are displayed on top of every other windows [17:07] they are written with QML [17:07] and use APIs defined in C++/QObjects in a common library called libunity-2d-private [17:08] a lot of these APIs just wrap other libraries, such as wnck, bamf, dee, etc. [17:08] and made these functionalities easily accessible to QML uis [17:08] I can go into the details of what each library provides us with [17:09] if anybody has questions about that [17:09] these 4 components are fairly window manager agnostic [17:09] today Unity 2D ships with Metacity [17:09] but it should work equally well with others: compiz, kwin, xfwm.. [17:11] historically Unity 2D's development started last year towards the end of the summer [17:11] and grew into being the default interface for ARM based Ubuntu isos [17:11] development happens on Launchpad [17:12] getting started for developers is straightforward [17:12] and documented https://wiki.ubuntu.com/Unity2D [17:12] at* [17:12] each component (dash, launcher, etc.) has a separate directory in the source tree [17:13] and can be hacked on independently [17:13] the policy for trunk is that it has to be releasable at any point; [17:13] that means, no regression when introducing no features and only landing features that are ready [17:14] automated builds are produced every day [17:14] and released into a PPA: https://launchpad.net/~unity-2d-team/+archive/unity-2d-daily [17:16] (connection issues here) [17:17] for developers who want to play around with it (or fix bugs) [17:17] the required knowledge to get on the project is: [17:17] - QML and Javascript for the UI pieces [17:18] - C++ if you want to add features that require new data that our backend does not provide [17:18] one thing to remember is that we try to keep the list of features between Unity 2D and 3D to be synchronised [17:19] so if you have an idea about the UI, don't forget that it needs to be done in both [17:20] I think that's enough for the general presentation. [17:20] Do you guys have any specific question? [17:20] let me take Andy80's :) [17:21] Andy80: we have a wrapper for indicators as well [17:21] Andy80: it's a C++/Qt API that calls the API of the unity-panel-service [17:21] Andy80: and essentially gives us a list of indicators to render [17:22] Andy80 asked: do we have a wrapper for indicators too or are we just calling the original methods? [17:22] (thanks ClassBot) [17:24] anybody else? :) [17:24] dpm asked: which libraries should an app developer wanting to interface his/her app with Unity 2D should know about? [17:25] so, dpm, the integration into Unity 2D is the same as the integration into Unity 3D [17:25] once you have done it for one you have done it for both [17:25] the libraries concretely are libunity [17:26] you can integrate with the launcher with that [17:26] you can also create a lens to add content to the dash (for example the Gwibber lens) [17:26] finally you can also integrate with the top panel's indicators [17:26] the way Banshee is integrated for example [17:27] in the sound menu [17:27] does that answer the question? [17:28] mohammedalieng asked: are there any plans to provide desktop gadgets, specially it is the default interface for ARM devices ? [17:28] mohammedalieng: there are no concrete plans so far for desktop gadgets [17:29] mohammedalieng: right now if one needs them I would personally recommend to use KDE's "gadgets" [17:29] that is the Plasma ones [17:30] it fits well technology wise with Unity 2D as it uses QML as well [17:30] Andy80 asked: if I correctly understand, Unity-2D must have the same features of Unity but without the 3D effects that would not be possible on PC without a 3D graphic card. But we know that QML is used even on hardware with 3D acceleration to have very nice effects too (look for example Harmattan running on Nokia N9). Would not be better to develop just Unity-2D + Unity-effects insted of duplicating the work having to develo [17:31] Andy80: I essentially agree with that [17:31] to add on that on a technical level [17:31] the visual possibilities of QML today are pretty advanced [17:31] especially on the effects side [17:31] the only limitation today is on the 3D side of things [17:32] only rudimentary 3D is available [17:32] which is a gap that can be closed with Qt Quick 3D [17:32] I have experiments of integrating 3D objects and scenes into the launcher and the dash [17:32] it works fairly well [17:33] on the performance side, we are already pretty good with the rendering engine we enforce the use of, raster [17:33] Unity 2D also works with the OpenGL2 engine [17:33] and we are quite looking forward to migrating to QML2 [17:33] that will provide very nice performance improvements [17:34] by adding a better rendering model when it comes to OpenGL and modern GPUs [17:35] the important thing to remember here is that: [17:35] 1) we are not limited by QML UI-wise (we can use Qt Quick 3D or even write our own OpenGL based QML ui elements) [17:36] 2) the QML code we write today for QML1 will work in the future without changes with QML2 and QML3D [17:36] Andy80: does that answer the question? [17:37] Andy80 asks: "what are we waiting for?" [17:37] we are waiting for you :) [17:38] there is quite a lot of invisible work happening in Unity 2D [17:38] that takes quite a bit of our attention [17:38] (we are just 3 developers today) [17:38] for example, supporting multi monitor properly [17:38] right-to-left languages [17:39] languages that need special input methods [17:39] fixing important bugs :) [17:40] so, developers are of course always available [17:40] on freenode #ayatana [17:40] and for those lucky ones going to UDS [17:40] they will be happy to spend time with those interested [17:41] we will have a session as well planning for Ubuntu P [17:41] dpm asked: what are the issues with right-to-left languages? Is it a matter of QML not supporting them well? [17:41] dpm: the issue was indeed that QML was not supporting them well [17:41] dpm: so, we had a first shot at it working around that limitation [17:42] but now Qt 4.7.4 is out with Qt Quick 1.1 that supports natively RTL languages [17:42] so we are mostly in the clear now [17:42] in Oneiric we will support them decently [17:42] another example of invisible work is accessibility support [17:43] critical for us as Unity 2D is becoming the default desktop on Ubuntu Oneiric where Unity 3D cannot run [17:43] I like to see Unity 2D as the universal version: [17:43] - works everywhere [17:44] - works for everybody [17:44] (all machines, all cultures, all needs) [17:44] that's being a bit idealistic of course :) [17:44] thanks for the question dpm [17:47] rsajdok asked: Is there the list of new feature which will be added to Unity-2d in future? [17:48] rsajdok: so, the first set of features we want to add are the ones that are in Unity 3D but not in 2D yet because we have not had time to do them [17:48] rsajdok: https://bugs.launchpad.net/unity-2d/+bugs?field.tag=delta-with-3d [17:49] rsajdok: and of course the wish list items https://bugs.launchpad.net/unity-2d/+bugs?search=Search&field.importance=Wishlist&field.status=New&field.status=Incomplete&field.status=Confirmed&field.status=Triaged&field.status=In+Progress&field.status=Fix+Committed [17:49] for those who want to start easy to learn how it works inside and implement something not too difficult [17:49] we use the bitesize tag [17:50] https://bugs.launchpad.net/unity-2d/+bugs?field.tag=bitesize [17:50] There are 10 minutes remaining in the current session. [17:51] thanks ClassBot [17:53] alright folks, just a few minutes for more questions [17:54] Andy80 asked: are you aware if any other distro is interested in Unity/Unity-2d? This could bring more contributions to the project [17:55] Andy80: I know somebody contacted us to package it up in OpenSuse [17:55] but that's the extent of my knowledge [17:55] rsajdok asked: Are there bugs in pure javascript? [17:55] There are 5 minutes remaining in the current session. [17:56] rsajdok: yes, it happens often that the issues can be fixed with a bit of QML + javascript [17:58] rsajdok asked: How find these bugs? [17:58] rsajdok: unfortunately we don't have such a list readily available [17:59] rsajdok: you will have to try I am afraid [17:59] I think it's time for me to leave the stage to Curtis Hovey [18:00] Thanks a lot for a great session Kaleo! [18:00] :) [18:00] thanks dpm, thanks for the questions everybody}}}