= Ubuntu Developer Stack = ||<>|| As part of the 10.10 plan I am keen to provide a simple tour of the Ubuntu developer stack, providing a rock solid tour of what opportunities the stack offers for developers on the platform. This will be structured as a list of the common components in the developer stack, each of which links to a page which provides a common structure with key information about that component. To get the ball rolling I have produced this common structure and documented an initial set of components, but need help to flesh out the content to get it ready. When editing content please bear the following rules in mind: * The writing style should be clear and easy to read. * The style should be attractive and excited about the technology - the goal here is to "sell" the platform to developers. * This content is targeted at developers, so feel free to use developer terms, but don't assume the reader knows anything about the technology. * Please keep your content within the structure of the Structure section below. Please don't add additional components to this page yet. Any questions? Email Jono Bacon at jono AT ubuntu DOT com. == Structure == ''Caption that explains what the app is in the screenshot''. '''First provide a 20 world bolded out description that summarizes the technology and really grabs the user'''. ''Now provide two paragraphs of more detailed content about what the technology can be used for. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis interdum metus sed odio aliquet mollis. Pellentesque imperdiet suscipit dui vitae tincidunt. Donec a iaculis enim. Morbi pharetra vestibulum facilisis. Pellentesque egestas aliquam eros, eget blandit odio malesuada varius. Donec dolor nibh, elementum ac dignissim a, sagittis sed dui. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam nec turpis nibh, eu dapibus lectus''. ''Morbi adipiscing erat id felis elementum luctus. Nunc erat mi, aliquet sed pulvinar vel, lacinia ut nulla. Fusce id urna est. Duis luctus convallis turpis, et suscipit risus ultricies id. Proin ut lacinia nunc. In hac habitasse platea dictumst. Mauris blandit, eros sed ultrices ullamcorper, risus nibh condimentum lorem, at accumsan quam elit quis turpis''. Five reasons to care about : 1. '''Feature name''' - no more than 50 words about the feature. 1. '''Feature name''' - no more than 50 words about the feature. 1. '''Feature name''' - no more than 50 words about the feature. 1. '''Feature name''' - no more than 50 words about the feature. 1. '''Feature name''' - no more than 50 words about the feature. Find out more: * '''Resource name that links to a site''' - description of the resource. * '''Resource name that links to a site''' - description of the resource. * '''Resource name that links to a site''' - description of the resource. == Content == Content can be added below... === GStreamer === {{attachment:pitivi.png|PiTiVi Screenshot}} ''The PiTiVi non-linear digital video editor that ships in Ubuntu 10.04 is built using GStreamer technology''. '''A powerful toolkit for managing a wide variety of media and codecs for playback, recording, digital effects and more'''. ''The powerful GStreamer framework provides a complete set of tools for managing multimedia. GStreamer provides a wide range of plugins that are connected together in a pipeline to offer unparalleled flexibility in how multimedia is processed in your application. Whether you want to produce a non-linear video editor, a multi-track audio recorder, a video processing tool, music streaming application or simply play back a sound, GStreamer has the flexibility you need''. ''GStreamer provides support for a range of container formats (asf, avi, webm, 3gp/mp4/mov, flv, mpeg-ps/ts, mkv, mxf, ogg), supporting both local decoding/encoding as well as streaming over the network. GStreamer is also at the heart of a number of other additional technologies such as Farsight for handling audio/video calls and GNonlin for producing non-linear editing support in your applications''. Five reasons to care about GStreamer: 1. '''Powerful Pipeline Creation''' - no matter how specialized your needs are, GStreamer can string together a wide range of different multimedia encoders/decoders and processors in exactly the way you need. 1. '''Comprehensive Codec Support''' - GStreamer support for all major local and streaming playback/recording codecs for both encoding and decoding. 1. '''Non Linear Support''' - GStreamer can be used to create non-linear editing support in applications with the GNonLin set of plugins. This can be seen in the PiTiVi (video editor) and Jokosher (audio multi-tracker) applications. 1. '''Network Syncing''' - GStreamer's network clocks provide a powerful method of multiple clients syncing to a server and synchronizing their playback perfectly for all clients. 1. '''Extensible''' - With GStreamer's plugin architecture, more and more plugins are being created all the time satisfy different multimedia needs. Find out more: * '''[[http://pygstdocs.berlios.de/pygst-tutorial/index.html|Python GStreamer Tutorial]]''' - an introductory guide to getting started with GStreamer. * '''[[http://pygstdocs.berlios.de/|Python Documentation]]''' - reference documentation for the GStreamer Python bindings. === Python === {{attachment:python-debugger-screenshot.png|Python debugger screenshot}} ''WinPDB is a graphical python debugger, here shown debugging the Ubuntu Software Center''. '''Python is a delightfully powerful, expressive, and easy to read dynamic programming language that is used throughout Ubuntu'''. ''While Ubuntu and the applications that come with Ubuntu are written in many different languages, from C to Java to Haskell, when writing something new we recommend using Python. Many important parts of Ubuntu are already written directly in Python, and we work to make every important API and framework within Ubuntu available from Python. And Python includes a rich standard library and vast set of 3rd party modules so there are libraries available for just about everything you can think of''. ''Another reason to use Python is how quickly you can prototype and experiment. No lengthy edit/compile/debug cycle means you can try code out more quickly. Python works well both for server applications using powerful frameworks like Django (web servers) and Twisted (any kind of network protocol server you can think of), and for graphical desktop applications such as Software Center and PiTiVi using PyGTK''. Five reasons to care about Python: 1. '''Python is friendly, open and easy to learn''' - Python is free and open source software, just like the rest of Ubuntu. There are no secrets with python - you can inspect every part of the system, and understand exactly how it works. 1. '''Python has "batteries included", with libraries to help you build every type of application''' - Python includes a rich standard library that handles everything from email to web servers to advanced data structures. And Ubuntu builds on top of that library with a set of powerful multimedia and desktop components ready to plug into your new application. 1. '''Python supports different programming styles''' - Some problems are best solved in a functional programming style, others in a procedural style, and others in an object-oriented style. Python gracefully supports each of these, allowing you to choose the style that you prefer and that matches the problem you are solving. 1. '''Python is easy to read''' - When you are trying to write a new application, you need to read the code! It's easy to read python code and understand what it is doing. Often people who don't know python are surprised when they can read the code and explain what it is doing right away. And since Ubuntu includes the full source code for every application, you can read other peoples code to see how they solved a certain problem. 1. '''Python is easy to debug''' - Everyone makes mistakes. To help you find and fix mistakes, Python includes a clean and simple graphical debugger that allows you to watch live code being run and inspect data structures. You can easily step through the code and see what is happening and how data changes as each line of code is executed. Find out more: * '''[[http://python.org]]''' - The python project website, where you can find documentation examples for the Python language itself. * '''[[http://docs.python.org/library/]]''' - The python standard library, with modules for everything: from email to advanced data structures. * '''[[http://pypi.python.org/pypi]]''' - The python package index, with 3rd party modules for everything else: from database access to scientific computing. * '''[[http://imgs.xkcd.com/comics/python.png]]''' - Everyone loves python, it's even in the cartoons! * '''[[http://www.swaroopch.com/notes/Python]]''' - A free book about the python programming language. === Ayatana === {{attachment:ayatana.png|Ayatana Messaging Menu screenshot}} ''The Messaging Menu in action with the chat, email and microblogging accounts set up.'' '''The different projects that fall under the Ayatana umbrella are designed to provide an intuitive desktop that pleases the eye.''' ''Ayatana is project that Canonical started to improve the Ubuntu desktop experience. This has already resulted in several projects that provide interesting technology for use with your application. [[https://launchpad.net/indicator-application|Application Indicators]] provides a consistent, easy and pretty replacement for the legacy notification area. The [[https://launchpad.net/indicator-messages|Messaging Menu]] and [[https://launchpad.net/notify-osd|Notify OSD]] give developers a solid notification framework that can be used to show notification bubbles or collect messages that need a response in such a way that the user is not disturbed in their current activity.'' ''These are just a selection of what you can do with Ayatana. Currently the Desktop Experience team is working hard on the [[https://launchpad.net/indicator-sound|Sound Menu]], a replacement for the traditional volume control slider that will also provide music player controls using the MPRIS standard. A complete list is available on [[https://launchpad.net/ayatana|the Ayatana project's Launchpad page]].'' Five reasons to care about the Ayatana project: 1. '''Integration with the Ubuntu desktop''' - When you use Ayatana projects you can be sure your application will fit in nicely with the rest of the Ubuntu desktop; 1. '''Quick and easy access to your functionality''' - Your users have easy and quick ways to access the functionality of your application via standardized paths; 1. '''Consistent and good looks''' - The Ayatana projects integrate well with the theme and provide a consistent look-and-feel, which means that your application's desktop elements won't look out of place and will behave like the users expects them to; 1. '''Easy APIs with bindings in several languages''' - Using Ayatana technology is easy with the well-designed APIs provided for several programming languages, including C, C#, Python and Vala; 1. '''Technology tested on its usability''' - Canonical runs regular usability tests with 'common' users to make sure the Ayatana projects are intuitive and users have no troubles using them. Find out more: * '''[[https://wiki.ubuntu.com/Ayatana|Ayatana on Ubuntu Wiki]]''' – the overview page of the Ayatana project on the Ubuntu Wiki; * '''[[https://launchpad.net/ayatana|Ayatana on Launchpad]]''' - the Ayatana umbrella project on Launchpad; * '''[[irc://irc.ubuntu.com/ayatana|#ayatana on Freenode]]''' - the Ayatana IRC channel on Freenode * '''[[https://launchpad.net/~ayatana|Ayatana discussion mailing list]]''' – join this Launchpad team to subscribe to the Ayatana discussion mailing list === Social From The Start === {{attachment:rb_sfts.png|Rhythmbox and the U1 Music Store being "social"}} ''Rhythmbox's UbuntuOne music store plugin showing retrieving a music store URL for a song in your library, and sharing it with your social network''. '''Gwibber is a desktop service and API which allows easy integration of desktop applications with social networking services'''. In an effort to make the Ubuntu Desktop more "social", we want to drive more social features down to desktop applications, not limiting users to the web browser experience. Gwibber can be used to post messages and other content to social networking services as well as retrieve content from your social contacts. Gwibber aggregates multiple accounts and services into a single interface making it easy to cross post updates to multiple sites or even just to specific services. The Gwibber API provides application developers the ability to integrate social networking features directly into their application. For example the screenshot posted above includes Ubuntu One Music store URL posting, a user can post a link directly to the music store's page for a given song. Another example can be found in the software center, users can recommend applications they like to their friends. Reasons to care about Gwibber: 1. '''Single interface''' - Easy access to multiple accounts/services 2. '''Simple API''' - Easily embed social features in your application. 3. '''Prebuilt widgets''' - GTK widgets available to just drop into your application. Find out more: * '''[[http://www.gwibber.com|Gwibber website]]''' * '''[[DesktopTeam/Specs/Maverick/SocialFromTheStart|Maverick blueprint]]''' === PyGTK === {{attachment:photobomb.png|Photobomb Screenshot}} ''Photobomb undergoing development, using PyGtk for all the features you see here''. '''PyGtk is the GUI toolkit that Ubuntu Developers use to create Ubuntu Applications'''. ''PyGtk combines the ease of the Python language with the power of the Gtk GUI Toolkit. PyGtk has widgets for creating windows, dialogs, buttons, toolbars, sliders, text entry fields, everything you could need to create an application for your users. PyGtk also works with advanced controls like GooCanvas for rocking a freeform 2d surface, and allows you to dive down into Pango or gdk if you want to push your app to the limit. PyGtk comes with Glade, a UI designer that makes it fast and easy to lay out you applications GUI.'' ''Quickly Widgets is a package of widgets built on top of PyGtk that make it easy to quickly add core functionality to your application. These widgets include things like grids for displaying data, web cam widgets, a media player widget, and prompts for getting input from users''. Five reasons to care about PyGtk: 1. '''Powerful Layout Editor''' - Glade is the UI designer that makes creating GUIs fast. 1. '''Complete Widget Toolkit''' - PyGtk and Quickly Widgets deliver all the GUI Widgets needed to create any application. 1. '''Desktop Integration''' - Native widgets make your app look and act like a real part of the desktop. Find out more: * '''Using Glade''' - manual chapter. * '''Using PyGtk with quickly''' - more manual chapters. * '''PyGtk Library Reference''' - Online reference deep divers into each widget and related classes. === Desktop Couch === (talk about the benefits of putting data in desktop couch, replication benefits, Ubuntu One etc) {{attachment:slipcover.png|the desktopcouch administration console}} ''The desktopcouch administration console, letting you see all your data from all your apps in one place''. '''Desktopcouch is shared storage for all your applications, synchronized to all your computers, without any work by developers or users'''. Desktopcouch is built to synchronize your data between different machines. So if your application stores its settings and its data in desktopcouch, then your users will find that using your app on their laptop means that it's also set up and ready to use on their netbook or their desktop computer, without them having to do any work to have that happen, and (importantly) without ''you'' having to do any work to enable that. Desktopcouch takes care of all the details of synchronization for you, so you don't have to even think about it; all the user needs to do is use Ubuntu One, and support for synchronizing data to Ubuntu One is built right in to desktopcouch out of the box. Storing your own data in desktopcouch is only half the win, though. Because it's a standard central database for everyone's applications to store data in, you can make use of other applications' data as well! Do you want your apps to use the user's addressbook? That data is in desktopcouch for you to make use of. Their bookmarks? In desktopcouch. If your app works with a particular sort of information -- let us say, to do lists -- then other apps that also work on tasks can all work on the same to do lists! You can concentrate on making your chosen app have a great UI without having to worry about writing "importers" from other apps. Using desktopcouch also opens up your application to be able to share data with the web. If an app stores its data in desktopcouch, then it will also be possible to write a companion web application which works with your users' data, by using that data from Ubuntu One's web service. So you can build a great desktop application and a great web application and have them work on the same data! Five reasons to care about desktopcouch: 1. Automatic synchronization - data and settings for all the apps you write are synced across all the user's computers without the user ''or'' the developer having to do any work to make that happen 2. Built in to every Ubuntu desktop - desktopcouch is ready for you to use, without you or your users having to install anything new 3. Ubuntu One integration - desktopcouch is built to integrate with Ubuntu One from the start 4. CouchDB - desktopcouch uses the popular CouchDB database server, familiar to many web server programmers and the flagbearer for the "NoSQL" movement 5. Quickly support - applications built with Quickly come with settings storage in desktopcouch built in Find out more: * [[http://www.freedesktop.org/wiki/Specifications/desktopcouch/Documentation|Desktopcouch documentation site]] - the documentation for desktopcouch explains how to use it, where you might wan tto use it, benefits, and strategy === Quickly === {{attachment:quickly.png|Quickly Screenshot}} ''Interactive applications like Photobomb can be created using Quickly''. '''Quickly is the tool that pulls together everything you need to make it easy and fun to write an app on Ubuntu'''. ''Quickly integrates project creation, code editing, GUI editing, running and debugging, as well as packaging and sharing via Launchpad.net, all in one easy to use command line interface. Quickly generates your project ready to run with everything you need for a complete Ubuntu Application. Quickly also comes with great tutorials and a great community of developers to help you create whatever applications you can imagine.'' ''Quickly is not an IDE. Rather, Quickly works by first choosing the right technologies for creating the kind of project you want to create for Ubuntu. And then it integrates those choices into the desktop and into Launchpad.net for you, all controlled with a few easy commands. Quickly has templates to help you create a Ubuntu application, a command line application, and a game, with more templates being created all the time.'' Five reasons to care about Quickly: 1. '''An Easy Choice''' - When you start an application with Quickly, all the hard decisions have been made. 1. '''Easy and Fun Application Generation''' - When you write an application with Quickly, all the boiler plate has been written for you. 1. '''Packaging and Sharing''' - Quickly applications are super easy to package and distribute. 1. '''Help''' - Quickly comes with tutorials and detailed help, and there is even a #quickly irc channel. Find out more: * '''[[https://launchpad.net/quickly|Homepage]]''' * '''[[https://wiki.ubuntu.com/Quickly|How to get started]]'''