=== nha is now known as Guest63334
jono[SLIDE 1]07:04
jono[SLIDE 1]07:05
persiajono: Please also advertise a URL of your slides for those not using lernid :)07:05
persia(or make lernid do this at class start)07:05
jonopersia, will do07:05
jonojust testing right now07:05
jono[SLIDE 1]07:05
jono[SLIDE 2]07:06
jono[SLIDE 3]07:06
jono[SLIDE 1]07:06
jonoall seems to be working :-)07:06
=== einand_ is now known as einand
=== kermiac_ is now known as kermiac
=== kermiac is now known as kermiac_
=== andylockran is now known as Webalizer
=== Webalizer is now known as andylockran
=== tobias is now known as Guest87382
=== Goomba is now known as Guest32140
=== Guest32140 is now known as gooomba
sfsocmhall119|work: yes14:02
mhall119|worksorry, seeing if Lernid works14:03
mhall119|workI had to setup an SSH tunnel and change my /etc/hosts file14:03
mhall119|workbut finally I can enjoy lernid from work14:04
WesssHi All, Ubuntu class had a session on Python for beginners last week, do you know where I can look at that session?14:04
gotik_which day was the python session?14:05
Wesssno sure if it was last thursday or friday14:06
mhall119|workthe 25th14:06
Wesssfound it.. tnx gotik14:08
wharpmhall119|work: what did you change your hosts file to get lernid to tunnel?14:16
mhall119|workwharp: I did ssh -L 6667:irc.freenode.net:6667 $myserver14:19
mhall119|workthen I had to set as irc.freenode.net in /etc/hosts14:19
mhall119|workso when Lernid connects to irc.freenode.net:6667, it connets to localhost:6667, which tunnels to the real irc.freenode.net:666714:20
wharphuh, that's not how I've done it in the past, but then again, I can't get it working atm so what do I know14:20
mhall119|workbecause irc.freennode.net is hard coded in lernid, and port 6667 is assumed from somewhere (I couldn't figure out how to set a specific ip)14:22
mhall119|workI did it this was14:22
hemanthPermission denied (publickey).!14:23
mhall119|workhemanth: you need to have ssh access to $myserver14:23
mhall119|workfor that matter, you need to have a server, $myserver is a placeholder14:24
hemanthare there any open severs? yes i know abut that access, as my machine is an ssh server with dydns as of now14:25
mhall119|workI don't know of any open servers, no14:25
mhall119|workif you can ssh to your server, that would work14:26
hemanthmhall119|work,shh tunneling with gmail server worked for you?14:26
mhall119|workhuh? ssh with gmail?14:26
mhall119|workI ssh into my webserver14:27
wharpah, nice, it works, thanks mhall119|work14:27
hemanthmhall119|work, got it, but my asking another question like have you tried ssh to gmail14:28
mhall119|workI didn't think gmail offered that kind of access14:29
hemanthi had tried it once, but i do blv they have ssh thinge14:29
mhall119|workI had no idea14:30
hemanth8001 can also be used ? like  ssh -L 8001:irc.freenode.net:8001 localhost, cos i m getting bind address already in use, as i'm connected to irc with another client14:32
mhall119|worknot for the local port, Lernid assumes 666714:32
mhall119|workbut if freenode listens on port 8001, you should be able to do that14:33
mhall119|workunless you wanted to do some kind of iptables port forwarding14:33
hemanthwhat is achieved my tunnel actually ? in this scenario, i had tunneled to servers to achieve more stable connect for a longer duration14:34
mhall119|workbut that would affect your other client too14:34
mhall119|workhemanth: at work I am behind a firewall that blocks IRC14:34
mhall119|workbut the firewall doesn't block ssh14:34
mhall119|workso I can make an ssh tunnel to the outside of the firewall, and send IRC traffic over that tunnel14:34
hemanthmhall119|work, ha ha ok :) i missed the main part so was confused what was going on uber kool +1 to power of GNU/Linux14:35
mhall119|workyes, ssh==win all the time14:36
hemanthhacking==win==happy :)14:36
hemanthmhall119|work, found ssh for gmail ssh -g -L 5223:talk.google.com:5223 -N you@yourserver.com14:38
mhall119|workhemanth: I'll check that out, thanks14:39
hemanthmhall119|work, np :)14:39
agbemenuwhat's the topic15:12
mhall119|workagbemenu: opening ceremonies start in ~ 45 minutes15:13
keine-ahnungtest, if lernid opens every page, even if there is no session running: https://wiki.ubuntu.com/Lernid15:18
nonchipIRSSIjust testing irssi. http://www.google.de15:31
=== johnsie is now known as Guest46344
=== avantman42 is now known as avantman42|work
=== MartyMcFly is now known as Guest32394
jononearly there :)15:58
cjohnston|cellHey jono15:58
=== parth is now known as Guest17784
etrusconhandler_: hello. since you're in the Contacts page, what about adding a link in the wiki page to the irclogs of the sessions? ;)16:00
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - http://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Event: Ubuntu Opportun istic Developer Week - Current Session: Welcome! Ubuntu For Opportunistic Developers - Jono Bacon - Instructor: jono || Questions in #ubuntu-classroom-chat
=== Goomba is now known as Guest6221
jonolets just wait a min for late folks to join :)16:01
jono[SLIDE 1]16:01
jonoLernid folks, click on the Session tab to see the slides16:01
jonoLernid may go a little grey while it downloads the slides16:02
jonobut it will come back :)16:02
jonook, non Lernid folks can grab the slides at http://www.jonobacon.org/files/uodw-welcome.pdf16:03
=== Guest6221 is now known as gooomba
jonowelcome everyone to Ubuntu Opportunistic Developer Week! woooooooo!16:03
jono[SLIDE 1]16:03
jonoclick Session to see the slides folks16:04
jonoI know a bunch of you, but some of you are new here, so let me first explain who I am16:04
jonomy name is Jono Bacon and I am the Ubuntu Community Manager working at Canonical16:04
jonomy job is to help grow a fun, productive and inspiring Ubuntu community: a place where we can all be together to celebrate an ethos, and work together to help build awesome software and community facilities around that ethos16:04
jono[SLIDE 2]16:04
jonoUbuntu is a way of life, a philosophy and an ideal: and being part of this incredible community is heaps of fun16:04
jonoour community is a phenomenal place to be: this picture was taken at our Ubuntu Developer Summit (UDS) in Barcelona16:05
jonoeach UDS is where we get together to discuss, design and plan our next version of Ubuntu16:05
jonoright now, we are working on this baby16:05
jono[SLIDE 3]16:05
jonohehe I am cut and pasting to a part way through and then I start typig16:06
jonotyping :)16:06
jonoUbuntu 10.04 Lucid Lynx will be the most exciting Ubuntu release in our history16:06
jono...so far16:06
jonoI think this release really defines who we are, where we have been and where we are going, and it packs some stunning features such as social networking build right into the desktop, incredible boot speed, refined look and feel, software center improvements, new apps and more16:06
jonoso...Ubuntu Opportunistic Developer Week, let me explain the idea behind the event16:07
jono[SLIDE 4]16:07
jonoUbuntu is here to help people learn, create and interact16:07
jonowhen I first put these slides together, it was for a talk in LA that was doing at SCALE16:07
jonothere I was throwing together a description of my talk, and the words "learn, create and interact" just popped into my head16:08
jono[SLIDE 5]16:08
jonoI then realized that this is a process in which each word helps us define and learn from the next one16:08
jonowe have all been passionate about build a system in which you can not only consume free software easily, but to also build a system, framework and tools that help you to collaborate16:08
jonoif you can easily LEARN how to be creative, you can CREATE and that can help you INTERACT with those people who use your creations or other creators16:09
jono[SLIDE 6]16:09
jonoUbuntu Opportunistic Developer Week is all about kicking off a set of ideas that inspire you good folks to CREATE16:09
jonothe whole point of the week is to break down the gap between having a cool idea and going ahead to implement it16:10
jono[SLIDE 7]16:10
jonothis gets to the core of the Ubuntu philosophy - we are who we are because of who we all are16:10
jonoif we can break down the barriers to people creating, we can all create together, continuing to build an incredible platform and set of tools that lets *everyone* create, irrespective of their interest or discipline16:10
jono[SLIDE 8]16:11
jonowith this goal in mind, I have been working hard really to socialize the term "Opportunistic Developers"16:12
jonoOpportunistic Developers are people like you and me: people who have cool ideas for software, but are not necessarily programmers by definition - we are people who have the ability to write code, but we write it for fun, often in our spare time, working on projects that are specifically interesting to us16:12
jono[SLIDE 9]16:12
jonothe platform that really changed this was the iPhone - much as it niggles at our free software tendencies, Apple did an incredible job not only delivering a device that people loved, but also a platform that harnessed the create ideas from opportunistic developers16:13
jonodevelopers have written everything from serious exercise apps to apps where you press a button and it makes a fart noise16:13
jonoin the opportunistic developer world, all apps are welcome, irrespective of how specialized or niche: you want to write an app for a specific service or site? go ahead!16:13
jonothe goal here is *enabling creativity*, irrespective of how it will manifest :-)16:13
jonoUbuntu provides an absolutely incredible platform for this: we have facilities for creating applications, using multimedia, networking, creating graphics, and all manner of other things16:14
jonowhile Ubuntu supports many languages and frameworks, we are particularly big fans of Python, and Python is simple, effective and can do pretty much anything you need it to do with the vast library of plug-ins and modules that we ship - this makes it a stunning platform for writing programs that are fun and interesting to you16:14
jonothis week provides a week of sessions on a wide variety of topics that explain how you can get started with this platform16:15
jononow, to really get the most out of this week, I would recommend you each think of a program to write16:15
jonothink of something fun and interesting and simple for you to focus your efforts on16:15
jonoit could be a serious app that helps you life, or something silly and fun16:15
jonowhatever it might be, think of something over the next hour and use that as your focus for making that happen this week16:16
jonoI have also created a challenge this week for you all16:16
jonoto think of an app, see how much progress you make on it and send me screenshots on Friday so I can blog about it and show it off16:16
jonomore details on this are at http://www.jonobacon.org/2010/02/25/the-grand-app-writing-challenge/16:16
jonoso, let's look at the collaborative development process16:17
jono[SLIDE 10]16:17
jonocreating programs follows this broad four step process16:17
jonoin this session I am going to talk about some of the work going on to help this process16:18
jono[SLIDE 11]16:18
jonowe actually have an incredible platform for building software16:18
jonothis diagram basically explains some of our key components16:18
jonofirstly, we have a tonne of ideas16:18
jonoyou lovely people tell me your ideas every day, and it is part of my job to help you realize them and see them happen16:19
jonoideas are great, but we want to convert them into software that people can run16:19
jonoso we have a bunch of development environments, with GNOME and KDE as good examples, which help this happen16:19
jonothey both offer great facilities for writing integrated top-class apps16:20
jonopersonally I don't care which environment you use, just use at least one :)16:20
jonowe then have Launchpad and Bazaar16:20
jonothese tools provide facilities in which we can collaborate together on software16:20
jonobzr helps you share source code with each other16:20
jonoand Launchpad provides facilities for hosting code, bug reports, answers and a wide range of other things16:21
jonoso at this point you could create software, but software is pointless unless people use it16:21
jonoso the Debian packaging system, which we use in Ubuntu, comes next16:21
jonowith it you can create packages which are simple to install and install all of their dependencies too16:22
jonofinally, how do we deliver these packages?16:22
jonoLaunchpad has a wicked-cool feature called Personal Package Archives16:22
jonothis is basically your very own Debian package archive where you can publish your software16:22
jonoand it can appear in the Ubuntu Software Center16:22
jonoso...we have an end to end set of tools for making software and delivering it16:23
jonoI now want to talk through some of the tools available and work going on which makes our four steps: imagine, create, collaborate and publish easier16:23
jono[SLIDE 12]16:23
jonothe first thing we need to do is break down this insane idea that writing programs is for other people16:24
jonothat "I am not smart enough" to write a program16:24
jonoor that "only proper programmers write programs"16:24
jonoI can assure you that you all have the ability to unlock an incredible world of creativity16:24
jonoyou just need to learn some key tools, and Python is an absolute doddle to use16:24
jonoto help break this down I have organized this week and I have been blogging up a storm on Planet Ubuntu and Planet GNOME about this16:25
jonoeveryone *can* do it16:25
jonoyou just need to give it a shot: think of a cool app to write, use the sessions this week to have a go at writing it and do it :)16:25
jonoyou have nothing to lose16:26
jono[SLIDE 13]16:26
jonothe next step is getting to the fun16:26
jonothis was a term Rick Spencer said to me once that stuck with me16:26
jonothe whole idea here is that we want to make software development so easy on Ubuntu that you don't need to suffer through the complexities that surround making software16:26
jonoin the past, build systems, Makefiles and other crap complicated things16:27
jonoall the things that did not involve writing code created a blocker for writing code16:27
jonoso we are keen to fix this16:27
jonoa great starting point here, and one encouraged throughout the week is Quickly16:27
jono[SLIDE 14]16:27
jonoquickly is a tool which lets you create new apps easily16:27
jonoit has a bunch of templates such as ubuntu-project that create apps for a particular environment or use case16:28
jonocreating an app is simple:16:28
jonoquickly create ubuntu-project mycoolapp16:28
jonobang that into a terminal and you have a new app16:28
jono(btw, you can install quickly from the software center or with: sudo apt-get install quickly)16:29
jono[SLIDE 15]16:29
jonoediting code in quickly is simple16:29
jonoinside the new directory you created (e.g. mycoolapp)16:29
jonowhack in: quickly edit16:29
jonoit loads all the code into GEdit16:29
jono[SLIDE 16]16:30
jonoediting your user interface is simple with glade16:30
jonojust type in:16:30
jonoquickly glade16:30
jonoand finally, if you want to run your app16:30
jono[SLIDE 17]16:30
jonotype in: quickly run16:30
jonocreating a new app and getting started is really quick and simple16:30
jonowe recommend that you all create your new apps with quickly in this way16:31
jonoRick Spencer has a quickly session later today16:31
jonoalso, if you want to get started writing programs, when you have created your new app, inside the new directory it creates, just run: quickly tutorial16:31
jonoit will show you how to create buttons, and have them do stuff :)16:31
jono[SLIDE 18]16:32
jonowe have been really keen to help optimize how people collaborate together too16:32
jonowe have some key tools which people use to work together, such as Launchpad and bzr16:32
jonolet me explain broadly how this works and a new project which is making this whole process easier16:32
jono[SLIDE 19]16:33
jonoimagine you want to fix a bug16:33
jonothis is basically how it works16:33
jono1. choose a bug to fix16:33
jonothis usually involves looking at bug reports on Launchpad16:33
jono2. download the code with bzr16:33
jono3. work on the code you downloaded to fix it16:33
jono4. commit the changes you made locally: this process basically generates a set of changes which represent your bug fix16:34
jono5. you then "push" you code: this is where you upload your changes to your account on Launchpad16:34
jono6. attach the branch with your bug fix in it to the original bug report16:34
jono7. finally, you propose your bug fix to be merged into the original project so everyone can use it16:35
jonoso it boils down to: decide what you want to fix, grab the code, fix it, identify the changes to share, upload them, propose them for inclusion in the main project16:35
jonowhile incredible flexible, this is quite complex to get your head around16:35
=== yofel_ is now known as yofel
jonobelieve me, you get the hang of it, but it takes a few times to get used to it16:36
jonoMartin Owens (doctormo on IRC) has been working on a tool to build this workflow into the desktop16:36
jonoit is caled Ground Control16:36
jonolet me explain how it works for fixing a bug16:36
jono[SLIDE 19]16:36
jono[SLIDE 20]16:37
jonoyou first identify a bug to fix16:37
jonolike this one, which is a test bug I added to the groundcontrol project16:37
jono[SLIDE 21]16:37
jononow go to the file manager in Ubuntu, and groundcontrol when installed (which is not on a default Ubuntu) will have a Projects directory in your home directory16:38
jonowhen you view that directory it adds a few buttons to nautilus at the top16:38
jonoif you click on the second button 'Fetch Project' you can select a project to work on16:38
jono[SLIDE 22]16:38
=== tobias is now known as Guest11438
jonoit then pops up this dialog box16:39
jonoyou can enter a project name, such as ground control, and it displays them in the dialog16:39
jonoselect it and click ok16:39
jono[SLIDE 23]16:39
jonothis will then create a 'groundcontrol' directory in Projects16:39
jononow if you want to fix a bug, click the 'Fix Bug' button16:39
jono[SLIDE 24]16:40
jonohere you can search for a bug: type in search terms or the bug number and it will list all the bugs that match your search16:40
jono[SLIDE 25]16:40
jonowhen you select  bug and click ok, the code is download into a folder called "bugfix-lp-<bugnumber>"16:40
jonothis is the branch where you will fix the bug16:41
jono[SLIDE 26]16:41
jononow go into that folder where the code is and fix the bug16:41
jonoimagine I just add some content to the README file as a test16:41
jono[SLIDE 27]16:41
jonowhen you have edited any of the files you will see an Upload Fix button appear16:41
jonowhen your bugfix is ready, just click the button16:41
jono[SLIDE 28]16:42
jonothis dialog then pops up16:42
jonoit asks you what changes you made: here summarize what you did to fix the bug16:42
jonothis is the commit message16:42
jono[SLIDE 29]16:42
jonoyou then see this dialog16:42
jonothis is where you can type in a message that the main project maintainers see when you propose your bug fix for merging - this gives you an opportunity to tell them your bugfix is good to be merged in16:43
jono[SLIDE 30]16:43
jonowhen you click OK, the bug fix is uploaded, attached to the bug report and the merge proposal is made16:43
jonoyou will now see a View Request button16:44
jono[SLIDE 31]16:44
jonoclick that and you can see the merge request that was made16:44
jonohere it says that I am proposing a fix for this bug to the ground control project16:44
jonothe owners of that project can now go and approve my fix if they like16:44
jono[SLIDE 32]16:44
jonoand here you can see the bugfix branch added to my bug report16:44
jonoas you can see, Ground Control merges the command line functionality right into bzr16:45
jonomaking development much easier16:45
jono[SLIDE 33]16:45
jonoso the final element is visability16:45
jonovisibility, rather :)16:45
jonomaking it really simple for people to access your software and use it16:45
jonothis is all about packaging16:46
jonopackaging is a complex art, and one that many people struggle with16:46
jonofortunately, Quickly makes it simple16:46
jono[SLIDE 34]16:46
jonoif you want to create a local package, just run: quickly package16:46
jonoquickly uses a tool called distutils-extra that will look at all the python modules you use and set them as dependencies for the package16:47
jonoso if I have this in my program:16:47
jonoimport gstreamer16:47
jonoquickly package will make sure my program has the gstreamer packages installed16:47
jononow, if you want to share your package with others, you can run: quickly release 0.116:48
jonothis will release a 0.1 version of your software and publish it to your PPA in Launchpad16:48
jonothis makes it possible for anyone else to grab your software and use it16:48
jonoand because it is a PPA, all future updates will be automatically delivered to them16:48
jono[SLIDE 35]16:49
jonosomething we have been working on in Lucid is to raise the visibility of PPAs16:49
jonoand they are now displayed in the Ubuntu Software Center16:49
=== angel_ is now known as anhelido
jonothis means that you can use these awesome tools to make your software and publish it easily via the Ubuntu Software Center16:49
jono[SLIDE 36]16:50
jonoI am a bug fan of eating your own dog food16:50
jonoso I have written some apps that highlight how this platform has enabled me, very much of a non-coder, to write software16:50
jonoa few examples...16:50
jono[SLIDE 37]16:50
jonoso named after my wife, it is her name backwards: Erica16:51
jonothis is a tool which provides a library of Python examples which you can use16:51
jonoI just released a new version, see http://www.jonobacon.org/2010/02/26/acire-0-3-released/ for details16:51
jono[SLIDE 38]16:51
jonowhich many of you are using to view this week :)16:51
jonoI was really keen to create an app which made connecting to events such as this really simple16:52
jonoso I created Lernid, added the ability to show slides and websites, the local schedule etc16:52
jononow mbudde is maintaining Lernid as I am busy with other things, thanks Michael! :)16:52
jono[SLIDE 39]16:52
jonoas some of you will know, I do a podcast called Shot Of Jaq16:53
jonoyou can check it out at http://www.shotofjaq.org16:53
jonoShot Of Jaq is a podcast which provides the first 10mins of a discussion and we encourage others to join us and continue the discussion on the website16:53
jonoit is all about discussion, so I have been writing an app called App Of Jaq which specifically builds Shot Of Jaq into your desktop16:54
jonoit is specific, and niche, but remember, that is cool for opportunistic developers :)16:54
jonoso there we have it16:54
jono[SLIDE 40]16:54
jonoa key resource which I set up for this is #ubuntu-app-devel on freenode16:54
jonothis is a channel filled with folks who are writing software16:55
jonoit is a great place to ask questions, share progress on your apps and more16:55
jonoalso, the very final session every day this week is a hacking party16:55
jonohead over to that channel and spend a few hours hacking on your new app16:55
jonoand you can be around others to ask questions and more16:56
jonohacking together is tonnes of fun :)16:56
jono[SLIDE 41]16:56
jonook, we only have a few mins16:56
jonoany questions?16:56
jonoNilsR70, Do we have to share copyright with Canonical when we use Launchpad?16:57
jonoeviltwin44, Isn't Acire something which would be much better suited as a website where people can submit snippits and people comment on them?16:57
jonoI deliberately made the library of snippets a separate project (http://www.launchpad.net/python-snippets) so you can provide any UI to thenm16:58
jonoAcire is a desktop UI, and you could have a web UI if you like16:58
jonoI am a desktop guy, and having it on the desktop is great for editing code, running snippets etc16:58
jonow1nGNUtz, QUESTION: Do you have plans to integrate quickly, glade in any of the existing IDEs so that the user doesn't need to swtich bettween command line and gedit?16:58
jonow1nGNUtz, most Linux hackers like using text editors and command line for running comands16:59
jonobut there is no reason why someone could not create an IDE16:59
jonotoo many people don't get started developing on Linux because of an IDE: it is a false prophecy, there are great tools such as GEdit and Glade to provide the equivalent functionality16:59
jonook, folks, thanks!16:59
jonoI am done, next up is aquarius who will get you all started with CouchDB! :-)17:00
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - http://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Event: Ubu ntu Opportunistic Developer Week - Current Session: CouchDB support in your app with DesktopCouch - Stuart Langridge - Instructor: aquarius || Questions in #ubuntu-classroom-chat
aquariusthanks very much, jono!17:01
aquariusHi, all. Welcome to CouchDB support in your app with DesktopCouch.17:01
aquariusI'm Stuart Langridge, desktopcouch architect. Normally I'm in disguise as a cool guy, but today I'm going to drop that disguise and talk about databases.17:01
aquariusOver the next hour I'm going to explain what desktopcouch is, how to use it, who else is using it, and some of the things you will find useful to know about the project.17:01
aquarius[SLIDE 1]17:01
aquariusIf you were part of Ubuntu Developer Week, you might find you know a lot of this!17:02
aquariusbut this is *opportunistic* developer week :)17:02
aquariusI'll talk for a section, and then stop for questions.17:02
aquariusPlease feel free to ask questions in #ubuntu-classroom-chat, and I'll look at the end of each section to see which questions have been posted. Ask at any time; you don't have to wait until the end of a section.17:02
aquariusYou should prefix your question in #ubuntu-classroom-chat with QUESTION: so that I notice it :-)17:02
aquariusSince I'm talking about databases, some of this is necessarily a bit technical. Do please ask questions or ask me to go over something again.17:03
aquariusSo, firstly, what's desktopcouch?17:03
aquariusWell, it's giving every Ubuntu user a CouchDB on their desktop.17:03
aquariusCouchDB is a "document-oriented database". If you're familiar with SQL databases, where you define a table and then a table has a number of rows and each row has the same columns in it...this is not like that.17:03
aquariusIn fact, CouchDB spearheads the "NoSQL" movement, which is all about new database stuff that isn't mired in a mass of SQL that belongs in the 1980s.17:03
aquariusSQL was good for its time. Like, say, Purple Rain by Prince. Now, though...there's something better.17:03
aquarius[SLIDE 1]17:04
aquariusInstead of regimented tables and rows, in CouchDB you store "documents", where each document is a set of key/value pairs. Think of this like a Python dictionary, or a JSON document.17:04
=== carlos is now known as Guest92650
aquariusSo you can store one document like this:17:04
aquarius{ "name": "Stuart Langridge", "project": "Desktop Couch", "hair_colour": "red" }17:04
aquariusand another document which is completely different:17:05
aquarius{ "name": "Stuart Langridge",17:05
aquarius  "outgoings": [17:05
aquarius    { "shop": "In and Out Burger", "cost": "$12.99" } ,17:05
aquarius    { "shop": "Ferrari dealership", "cost": "$175000" }17:05
aquarius  ]17:05
aquariusThe interface to CouchDB is pure HTTP. Just like the web. It's RESTful, for those of you who are familiar with web development.17:05
aquariusThis means that every programming language already knows how to speak it, at least in basic terms.17:05
aquarius[SLIDE 2]17:05
aquariusCouchDB also comes with an in-built in-browser editor, so you can look at and browse around and edit all the data stored in it.17:06
aquariusSo, the desktopcouch project is all about providing these databases for every user, so each user's applications can store their data all in one place.17:06
aquariusYou can have as many databases in your desktop Couch as you or your applications want, and storage is unlimited.17:07
aquariuswell, assuming you have an infinitely large hard drive, anyway.17:07
aquariusDesktop Couch is built to do "replication", synchronizing your data between different machines. So if you have, say, Firefox storing your bookmarks in your desktop Couch on your laptop, those bookmarks could be automatically synchronized to your Mini 9 netbook, or to your desktop computer.17:07
aquariusThey can also be synchronized to Ubuntu One, or another running-in-the-cloud service, so you can see that data on the web, or synchronize between two machines that aren't on the same network.17:08
aquarius[SLIDE 3]17:08
aquariusSo you've got your bookmarks everywhere. Your own personal del.icio.us, but it's your data, not locked up solely on anyone else's servers.17:09
=== w1nGNUtz_ is now known as w1nGNUtz
aquariusImagine if your apps stored their preferences in desktop Couch. Santa Claus brings you a new laptop, you plug it in, pair it with your existing machine, and all your apps are set up. No work.17:09
aquariusBut sharing data between machines is only half the win. The other half is sharing data between applications.17:10
aquariusI want all my stuff to collaborate. I don't want to have to "import" data from one program to another, if I switch from Thunderbird to Evolution to KMail to mutt.17:10
aquariusI want any application to know about my address book, to allow any application to easily add "send this to another person", so that I can work with people I know.17:10
aquariusI want to be able to store my songs in Banshee and rate them in Rhythmbox if I want -- when people say that the Ubuntu desktop is about choice, that shouldn't mean choosing between different incompatible data silos. I can choose one application and then choose another, you can choose a third, and we can all cooperate on the data.17:11
aquariusMy choice should be how I use my applications, and how they work; I shouldn't have to choose between underlying data storage. With apps using desktopcouch I don't have to.17:11
aquariusAll my data is stored in a unified place in a singular way -- and I can look at my data any time I want, no matter which application put it there! Collaboration is what the open source desktop is good at, because we're all working together. It should be easy to collaborate on data.17:11
aquariusThat's a brief summary of what desktopcouch *is*: any questions so far before we get on to the meat: how do you actually Use This Thing?17:11
aquariuspecisk> QUESTION: How CouchDB stores data? Multiple files, or something else?17:12
aquariuseach database is stored in a separate file, but you never, ever have to care about that :) Like how you don't have to care exactly how MySQL stores your databases17:12
aquariusbrunogirin> QUESTION: how do you control what apps see what data?17:12
=== cjohnston|cell_ is now known as cjohnston|cell
aquariusbrunogirin, at the moment you can't limit which apps can see which databases, but it woul dbe possible to add that if there was a need for it -- authentication to desktopcouch is done with OAuth specifically for ths sort of thing17:13
aquariusosteenbergen> QUESTION: Which programs are supported today??17:14
aquariusany program that wants to use desktopcouch can do so!17:14
aquariusdanielbell> QUESTION: is there any limits on what kind of data you can store in a couchdb? can you store whole paragraphs of text - will it retain formatting like linebreaks and stuff like that?17:15
aquariusno limit to what you can store. Line breaks will be retained.17:15
aquariusab28> QUESTION: Data migration and replication is possible with CouchDB?17:15
aquariusyep. That's what I meant above by talking about how you can share data between machines17:16
aquariusalanbelll> QUESTION: can I share a desktop couch database with someone else?17:16
aquariusthere's no built-in way to do that with desktopcouch at the moment. I have Plans, though. :)17:16
aquariusfredo> QUESTION: Is desktopcouch intended to replace gconf?17:16
aquariusno. gconf is about configuration. desktopcouch is about information. It ought to be possible to implement a desktopcouch back-end to gconf, though, and it's something that I've thought about and thought would be interesting17:17
aquariustiteuf_87> QUESTION: how well does it work on other systems like Windows when you try to make an app cross-platform?17:17
ClassBottiteuf_87 asked: how well does it work on other systems like Windows when you try to make an app cross-platform?17:17
aquariusshut up, classbot. :)17:17
aquariusthere's an ongoing effort to port desktopcouch to Windows, led by mandel, who's doing an excellent job. I'm sure he'd be happy to get some help, though :)17:18
aquariuswebwurst> QUESTION: could you put this link to te panel top left? ;) http://couchdb.apache.org/17:18
aquariussure :)17:18
aquariusdamo35> QUESTION: Who defines the standards for how a music player should store it's data, for example? Would Rhythmbox and Banshee each have plugins to convert to CouchDB?17:18
aquariusyes. there's a mailing list where this sort of thing is discussed; it's about rough consensus and running code, rather than schemas which are inscribed on stone tablets and Must Be Obeyed. What we want is for people to get together and talk through this stuff.17:19
aquariusOK, I'll carry on now17:20
aquariusThe easiest way to use desktopcouch is from Python, using the desktopcouch.records module.17:20
aquarius[SLIDE 4]17:20
aquariusThis is installed by default in Karmic and Lucid.17:20
aquariusAn individual "document" in desktop Couch is called a "record", because there are certain extra things that are in a record over and above what stock CouchDB requires, and desktopcouch.records takes care of this for you.17:20
aquariusFirst, a bit of example Python code! This is taken from the docs at /usr/share/doc/python-desktopcouch-records/api/records.txt.17:20
aquarius>>> from desktopcouch.records.server import CouchDatabase17:20
aquarius>>> from desktopcouch.records.record import Record17:20
aquarius>>> my_database = CouchDatabase("testing", create=True)17:20
aquarius# get the "testing" database. In your desktop Couch you can have many databases; each application can have its own with whatever name it wants. If it doesn't exist already, this creates it.17:21
aquarius>>> my_record = Record({ "name": "Stuart Langridge", "project": "Desktop Couch", "hair_colour": "red" }, record_type='http://example.com/testrecord')17:21
aquarius# Create a record, currently not stored anywhere. Records must have a "record type", a URL which is unique to this sort of record.17:21
aquarius>>> my_record["weight"] = "too high!"17:21
aquarius# A record works just like a Python dictionary, so you can add and remove keys from it.17:21
aquarius>>> my_record_id = my_database.put_record(my_record)17:22
aquarius# Actually save the record into the database. Records each have a unique ID; if you don't specify one, the records API will choose one for you, and return it.17:22
aquarius>>> fetched_record = my_database.get_record(my_record_id)17:22
aquarius# You can retrieve records by ID17:22
aquarius>>> print fetched_record["name"]17:22
aquarius"Stuart Langridge"17:22
aquarius# and the record you get back is a dictionary, just like when you're creating it.17:22
aquariusThat's some very basic code for working with desktop Couch; it's dead easy to save records into the database.17:23
aquariusYou can work with it like any key/value pair database.17:23
aquariusAnd then desktopcouch itself takes care of things like replicating your data to your netbook and your desktop without you having to do anything at all.17:23
aquariusAnd the users of your application can see their data directly by using the web interface; no more grovelling around in dotfiles or sqlite3 databases from the command line to work out what an application has stored.17:23
aquariusYou can get at the web interface by browsing to file:///home/aquarius/.local/share/desktop-couch/couchdb.html in a web browser, which will take you to the right place.17:24
aquariusI'll stop there for some questions about this section!17:24
aquarius(but first I'll fix the browser in lernid. Sorry about that, all. http://allaboutubuntu.files.wordpress.com/2008/02/bacon.jpg )17:24
aquariusazathothgr> why a url ?17:25
aquariusTwo reasons: the first is that a URL is an easy way to ensure that record types are unique and don't clash (if you call your record type "recipe", someone else might independently pick that name)17:25
aquariusand secondly, because you are encouraged (but not required!) to write something about the fields you expect in the record at that URL, so when someone else thinks "I would like my app to collaborate with yours on data", they can look at the detail of the record to find out why it's like it is.17:26
aquariusvirkang> QUESTION: can we store an entire file in a database record ?17:26
aquariussure. I mean, I wouldn't just dump the whole file in, I'd store it in some sort of structured way, but you can do so.17:27
aquariusnadako70> QUESTION: how to configure the actual replication? :)17:27
aquariusreplication between machines on your network is set up with desktopcouch-pair, which is in the desktopcouch-tools package17:27
aquariusreplication to Ubuntu One is set up for you if you're an Ubuntu One user17:27
aquariusdanielbell> QUESTION: does record type have to be a single "word" can you have spaces in record types?17:28
aquariusit needs to be a valid URL17:28
aquariussomething you can visit in your web browser.17:28
aquariusbrunogirin> QUESTION: can you limit replication to specific databases?17:28
aquariusyes. At the moment it's harder than it should be, though. You need to edit the paired-server records in the management database in desktopcouch and add to excluded_names.17:29
aquariusthere's a Launchpad Answers question about this which should cover all the detail.17:29
aquariusnvsbl91> QUESTION: does it matter what that url is?17:29
aquariusnope, as long as it's unique to that record type.17:30
aquariusOK, I shall carry on!17:30
aquariusNext, on to views.17:30
aquariusBeing able to retrieve records one at a time is nice, but it's not what you want to do most of the time.17:30
aquariusTo get records that match some criteria, use views.17:30
aquariusViews are sort of like SQL queries and sort of not. Don't try and think in terms of a relational database.17:30
aquariusThe best reference on views is the CouchDB book, available for free online (and still being worked on): the views chapter is at http://books.couchdb.org/relax/design-documents/views17:30
aquariusBasically, a view is a JavaScript function.17:31
aquariusWhen you request the records from a view, desktopcouch runs your view function against every document in the database and returns the results.17:31
aquariusSo, to return all documents with "name": "Stuart Langridge", the view function would look like this:17:32
aquariusfunction(doc) { if (doc.name == "Stuart Langridge") emit(doc._id, doc) }17:32
aquariusThis sort of thinking takes a little getting used to, but you can do anything you want with it once you get into it17:32
aquariusdesktopcouch.records helps you create views and request them17:33
aquarius# creating a view17:33
aquarius>>> map_js = """function(doc) { emit(doc._id, null) }"""17:33
aquarius>>> db.add_view("name of my view", map_js, None, "name of the view container")17:34
aquarius# requesting the records that the view returns17:34
aquarius>>> result = db.execute_view("name of my view", "name of the view container")17:34
aquariusThe "view container", called a "design doc", is a collection of views. So you can group your views together into different design docs.17:34
aquariusAdvanced people who know about map/reduce should know that this is a map/reduce approach.17:35
aquariusYou can also specify a reduce function (that's the None parameter in the add_view function above)17:35
aquariusThe CouchDB book has all the information you'll need on views and the complexities of them.17:35
aquariusQuestions on views? :-)17:35
aquariushemanth> QUESTION: can CouchDB used for webbased apps, like different user different db with the same login page?17:35
aquariusIt could be, yeah. That's a CouchDB question about running it on the server, which is a jolly useful thing to do, but desktopcouch isn't really about that; desktopcouch is about using the CouchDB technology to give people a cool DB on their desktop for their apps to use17:36
aquariusso, it's a good question, I'm just not going to go into it here ;)17:36
aquariusw1ngnutz> QUESTION:  You mentioned "record_type='http://example.com/testrecord". Does this need to be unique?17:36
aquariusit's unique for a *type* of record.17:36
aquariusso if you're writing an app which helps you remember recipes, and your app stores each recipe you want to remember as a record, then they'd all have the same record type17:37
aquariusif your app stores a few different kinds of record, each kind of record would have a different record type17:37
aquariusrovax31> QUESTION: is couchdb oython engine on for view parsing with desktop couch for js haters?17:38
aquariuser, Crovax31, that was17:38
aquariusit's not on by default (has mikeal finished writing it yet? :))17:38
aquariusthere's no reason why you couldn't install it and use it for your apps, though.17:38
aquariusnadako70> QUESTION: oh, what about indexing, running a js function for every record seems not too optimal for frequent requests17:38
aquariusit doesn't *really* run it every go. Instead, couchdb keeps cached versions of the values around, sort of, and when new records are added, they're added to the result sets for views at the same time. Sort of. But this is deep techie stuff. The Couch book has all the detail you could want about this.17:39
aquariusosteenbergen> QUESTION: Why triple quotes?17:39
aquariusso I can be lazy and not care if my JS code has quotes in. ;)17:40
aquariusOK,I shall continue17:40
aquariusThere is an Even Easier way to have applications use desktop Couch for data storage.17:40
aquariusOne of the really cool things in karmic is Quickly: https://wiki.ubuntu.com/Quickly17:40
aquariusquickly helps you make applications...quickly. :-)17:41
aquariusand apps created with Quickly use desktopcouch for data storage.17:41
aquariusIf you haven't seen Quickly, it's a way of easily handling all the boilerplate stuff you have to do to get a project going; "quickly create ubuntu-project myproject" gives you a "myproject" folder containing a Python project that works but doesn't do anything.17:41
aquariusSo you can concentrate on writing the code to do what you want, rather than boilerplate to get started.17:41
aquariusQuickly is gonna come up a lot this week. It's designed for opportunistic programming.17:41
aquariusIt's dead neat :)17:41
=== ssd7 is now known as Guest65382
aquariusjono's already covered quickly a bit in his introduction, and there's a session on it later in the week17:41
aquariusAnyway, quickly projects are set up to save application preferences into desktop Couch by default. So you get the advantages of using desktop Couch (replication, browsing of data) for every quickly project automatically.17:41
aquariusThe quickly guys have also contributed CouchGrid:17:42
aquarius>>> from desktopcouch.records.couchgrid import CouchGrid17:42
aquarius>>> keys=["key","another key"] # to label the columns17:42
aquarius>>> couchgrid = CouchGrid(db_name, record_type=record_type, keys=keys)17:42
aquarius>>> mywindow.pack_start(couchgrid)17:42
aquariusand then you have a CouchGrid, which is a data table where all the data is automatically retrieved from desktopcouch and stored back into desktopcouch when changed17:42
aquariushttp://www.youtube.com/user/calorielookup#p/a/u/0/Vwr5Xw5ZrIE has a video demonstrating couchgrids17:42
aquariusoops, now everyone can hear rickspencer3 talking in the video ;)17:43
=== niko is now known as Guest79188
=== nik0 is now known as niko
aquariusCouchGrid is moving out of the desktopcouch core and into quidgets, a cool set of widgets deliberately designed to work well in quickly apps and be just as cool as quickly itself17:44
aquariusYou don't have to know anything about desktopcouch at all for this! Just use the widget and your data will be saved to the database and synced to your different machines with no effort or code on your part at all.17:44
aquarius"quickly tutorial ubuntu-project" has lots of information about CouchGrid and how to use it.17:44
aquariusAny questions about quickly? (I can't guarantee to be able to answer them, but #quickly is great for this.)17:45
aquarius(specifically, questions about using quickly with desktopcouch. If you have questions about quickly itself, you'll be best asking them in the Quickly session, next)17:45
aquariusSo, who's already using desktopcouch?17:46
aquariusQuickly, as mentioned, uses desktopcouch for preferences in projects it creates.17:46
aquariusThe Gwibber team are working on using desktopcouch for data storage17:46
aquariusand that's working in the latest lucid, which is way, way cool17:47
aquariusBindwood (http://launchpad.net/bindwood) is a Firefox extension to store bookmarks in desktopcouch17:47
aquariusMacaco-contacts is transitioning to work with desktopcouch for contacts storage (http://www.themacaque.com/?p=248)17:47
aquariusEvolution can now, in the evolution-couchdb package, store all contacts in desktopcouch17:48
aquariusAkonadi, the KDE project's contacts and PIM server, can also store contacts in desktopcouch17:48
aquariusThese last three are interesting, because everyone's collaborating on a standard record type and record format for "contacts", so Evolution and Akonadi and Macaco-contacts will all share information.17:48
aquariusSo if you switch from Gnome to KDE, you won't lose your address book.17:48
aquariusI'm really keen that this happens, that applications that store similar data (think of mail clients and addressbooks, as above, or media players storing metadata and ratings, for example) should collaborate on standard formats.17:48
aquariuslamalex_2> Is this as an alternative to gconf?17:49
aquarius no. gconf is about configuration. desktopcouch is about information. It ought to be possible to implement a desktopcouch back-end to gconf, though, and it's something that I've thought about and thought would be interesting17:49
aquariusrickspencer3> A wiki space with existing record types would be nice17:49
aquariushttp://www.freedesktop.org/wiki/Specifications/desktopcouch has a few17:50
aquariusbut I do not want to give the impression that you have to get "approval" or anything, or be listed in a central repository17:50
aquariusyou can invent your own record types. Point them to whatever URL you choose. Get together with people and decide between yourselves.17:50
aquariusThere's no overall control. It's all about enabling people to work together. You don't have to "register" with the desktopcouch team or anything.17:51
aquariusvirkang> QUESTION: How are DesktopCouch and Ubuntu One related ?17:51
aquariusUbuntu One provides a home in the cloud for your desktopcouch data. This makes it easy to synchronize data between machines that aren't on the same network. You don't need to use Ubuntu One to use desktopcouch, and you can synchronize data between desktopcouches on your network without using Ubuntu One at all.17:52
aquariusnilsr47> QUESTION: Any ideas for collaborating on record types?17:52
aquariusif you've got an idea for a record type that you think that your app would use, and you think that others might want the same record type so you can all collaborate, get in touch with them and talk it over17:53
aquariusthe desktopcouch mailing list is a good place to have that discussion17:53
aquarius(link shortly :))17:53
aquarius[SLIDE 5]17:53
aquariusso, why use desktopcouch? This is what you should take away from this talk.17:53
aquariusIt's an easy way to store data. You don't have to think about SQL statements. Just make a Python dictionary, which you already know how to do, and then store it.17:54
aquariusStoring your data in desktopcouch means that it's everywhere, on all your machines. That's no extra work at all; we take care of all of that for you.17:54
aquariusYou get the web editor for free. It's so, so much easier to work with and play with and see what your application is doing if you can see all the data that it's storing.17:54
aquariusAnd, where should you find more out?17:54
aquarius[SLIDE 6]17:54
aquariusDetails about the desktopcouch project can be found at http://www.freedesktop.org/wiki/Specifications/desktopcouch17:54
aquariusthe documentation is also helpful (well, I hope it is), and http://www.freedesktop.org/wiki/Specifications/desktopcouch/Documentation#Iamadeveloper.2CandIwanttheapplicationsIwritetostoredatainandworkwithdesktopcouch is particularly relevant to this group17:55
aquariusThere's a mailing list at http://groups.google.com/group/desktop-couchdb17:55
aquariusThe code is developed in Launchpad: http://launchpad.net/desktopcouch17:56
aquariusThe best place to ask questions generally is the #ubuntuone channel; all the desktopcouch developers are hanging out there17:56
aquariusThe best place to ask questions that you have right now is...right now, so go ahead and ask in #ubuntu-classroom-chat, and I'll answer any other questions you have!17:56
aquariusI've got about 3 minutes before rickspencer3 blows us all away with the sheer coolness of quickly :)17:56
aquariusnilsr47> QUESTION: Do you have to do something special to run CouchDB?17:57
aquariusNilsR47, no. Just use desktopcouch.records and it gets run for you. You never have to start it up manually.17:58
aquariustiteuf_87> QUESTION if gconf is more for application configuration, why does quickly uses desktopcouch as default for storing settings?17:58
aquariusthat's a quickly question, that is ;)17:58
aquariusthere are benefits to using desktopcouch, like that you get the synchronization for free17:58
aquariusit would be great if gconf had that, but that's quite a lot of work -- as mentioned earlier, one way to do that would be to implement a desktopcouch backend for gconf17:59
aquarius<rickspencer3> mostly writing to gconf is too hard; writing to desktopcouch is dead simple; also, you get syncing18:00
aquariusevrick67> hmm how do you get desktoopcouch to sync between computers on a network?18:00
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - http://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Event: Ubuntu Opportunistic Developer Week - Current Session: Creating an application from scratch with Quickly - Rick Spencer - Instructor: rickspencer3 || Questions in #ubuntu-classroom-chat
aquariusif you're not using Ubuntu One, then check out the desktopcouch-pair program in the desktopcouch-tools package18:00
rickspencer3aquarius, that was awesome!18:01
rickspencer3since desktopcouch has come on the scene, I hardly persist anything anywhere else18:01
rickspencer3it's so easy to use the records api18:01
rickspencer3anywho, quickly time18:01
rickspencer3I have my class notes here:18:02
rickspencer3just in case it makes it easier to follow18:02
rickspencer3Shall I begin?18:02
rickspencer3let's roll18:03
rickspencer3so what is Quickly?18:03
rickspencer3first, Quickly is a community project that I started in my spare time18:03
rickspencer3however, didrocks is the true author18:03
=== carlos is now known as Guest88447
rickspencer3I call Quickly, among other things, an "Application Templating System"18:04
rickspencer3the essence of the project is to provide you boiler plate for the kind of program you want to write18:04
rickspencer3so the code that you would have to write for every program of a certain type gets generated for you18:05
rickspencer3that part, I call the "boiler plate"18:05
rickspencer3but Quickly is also a set of commands18:05
rickspencer3the boiler plate is designed to integrate with the Ubuntu Application infrastructure18:05
rickspencer3thinks like bzr, launchpad, PPAs, etc...18:05
rickspencer3and the commands are what make all that work18:06
rickspencer3The moto of Quickly is "Easy and Fun"18:06
rickspencer3to install it, go:18:06
rickspencer3$sudo apt-get install quickly18:06
rickspencer3this may take a while, as there are lots of tools and dependencies that get installed for you18:07
rickspencer3Note that the current version is 0.2.518:07
rickspencer3this is the first iteration of quickly and comes with 1 template18:07
rickspencer3it has support for PPAs and everything, but the launchpad integration is a bit brittle18:08
rickspencer3the next version is 0.4, and didrocks will deliver that very very soon18:08
rickspencer3it will be the version of Lucid18:08
rickspencer3and it will have at least 2 templates, but maybe 318:08
rickspencer3the rest of the class will be in 4 parts:18:09
rickspencer3Creating your app18:09
rickspencer3Editing the UI18:09
rickspencer3Writing Code18:09
rickspencer3Packaging and PPAs18:09
rickspencer3before we go, any questions?18:09
ClassBotlamalex_2 asked: Is quickly always glade/python/etc., or is that template dependant18:09
rickspencer3that is template dependant18:10
rickspencer3since Ubuntu is a gnome based distro, the ubuntu-project template uses that18:10
ClassBotstefodestructo asked: how hard is it to integrate an existing project into quickly?18:10
rickspencer3there is no intrinsic importing system18:11
rickspencer3I "ported' bughugger to quickly so I could get PPA support and such18:11
rickspencer3since bughugger is python, I was able to generate a new quickly app, and then just start copying code over18:11
rickspencer3it took about 30 minutes, I guess18:11
rickspencer3there was a question about the new templates18:12
rickspencer3didrocks added a command line app template (ubuntu-cli), and I am working on a pygame template18:12
rickspencer3QUESTION: how much work would it be to create a kubuntu-project template?18:13
rickspencer3probably not much18:13
rickspencer3just write the boiler plate code18:13
ClassBotbrunogirin asked: are there plans to merge PPA/bzr integration with what ground contolr does?18:13
rickspencer3all the launchpad commands and such could just inherit from the ubuntu-applcation template18:14
rickspencer3I am very interested in pursuing that18:14
rickspencer3I hope we have lots of productive sessions at UDS around the relationship between Quickly and Ground Control18:14
rickspencer3let's move on to creating a project18:14
rickspencer3in Karmic, to create an app, you do this:18:15
rickspencer3quickly create ubuntu-project appname18:15
rickspencer3where appname is a name you choose18:15
rickspencer3note that in 0.2.5 ubuntu-project template only support one word application names :(18:15
rickspencer3when you issue this command, an app will be generated for you18:15
rickspencer3after you create it and test it out, there will be a new directory named after your app18:16
rickspencer3cd appname18:16
rickspencer3now you can run the app:18:16
rickspencer3quickly run18:16
rickspencer3or you can edit the code:18:16
rickspencer3quickly edit18:16
rickspencer3use tab completion to see all the commands you can do18:16
rickspencer3or try18:16
rickspencer3quickly help'18:16
rickspencer3quickly tutorial18:16
rickspencer3on 0.4, it will be slightly different18:17
rickspencer3we changed the template name, so go:18:17
rickspencer3quickly create ubuntu-application appname18:17
rickspencer3also note that in .4 you'll be able to do multi-word names18:17
rickspencer3like app-name18:17
rickspencer3any questions about creating an app with quickly?18:17
rickspencer3QUESTION: can you rename a quickly project once you've created it?18:18
ClassBotdanielbell asked: what are the other templates that might be in 0.4?18:18
rickspencer3this is hard to do18:18
rickspencer3sorry, I was very meant to cjohnston there :/18:18
rickspencer3so, if you've created a project, there is all kinds of string replacement that goes on, so renaming is a hard manual process18:18
rickspencer3maybe we should add a rename command18:19
rickspencer3for the other templates, I mentioned ubuntu-cli, and maybe ubuntu-pygame or something18:19
rickspencer3move on to editing the UI?18:19
rickspencer3so, for the ubuntu-project, you'll use glade to edit the UI18:20
rickspencer3Glade is a UI editing tool, that creates the XML you need to describe your windows and widgets18:20
rickspencer3don't worry because the quickly template totally handles keeping the code and the XML hooked up18:20
rickspencer3to start editing the UI in 0.2.5, use:18:21
rickspencer3quickly glade18:21
rickspencer3note that you MUST start glade this way18:21
rickspencer3otherwise the correct files won't be loaded into glade and it won't work18:21
rickspencer3in 0.4 we changed teh name of the command to:18:21
rickspencer3quickly design18:21
rickspencer3this is because perhaps other templates won't use glade18:21
rickspencer3like I assume Kubuntu would not use Glade, for example18:22
rickspencer3so here are some tips for using Glade if you are new to Glade18:22
rickspencer3first, adding widgets works like a fill tool18:22
rickspencer3you click the widget you want in the toolbox, and then click where you want it to be on the window18:23
rickspencer3the widgets will then fill the space alloted to it18:23
rickspencer3to layout the form, you use HBoxes and VBoxes18:23
rickspencer3an HBox handles Horizontal layout, and a VBox handles veritical18:23
rickspencer3so you will find yourself putting lots of boxes within boxes18:24
rickspencer3when you add a widget to a window, you can select it in the "inspector" tree if it is hard to select in the window itself'18:24
rickspencer3boxes can be hard to select in the window, for example18:24
rickspencer3if a widget is in a box, use the position property in the "Property editor" window in the "packing" tab to change the order18:25
rickspencer3you can also set the pack type to start or end to change the order18:25
rickspencer3Fill and Expand control sizing18:25
rickspencer3while Border and Padding control spacing18:25
rickspencer3whenever possible, you should use "Stock" widgets18:26
rickspencer3they get translated, the right icons, etc... automatically18:26
rickspencer3finally, if you want to add a dialog to your project18:26
rickspencer3you should:18:26
rickspencer31. close glade18:26
rickspencer32. go:18:26
rickspencer3$quickly dialog dialogname18:26
rickspencer33. quickly glade18:26
rickspencer3that's for 0.2.5 in karmic18:26
rickspencer3for 0.4 go18:27
rickspencer31. close glade18:27
rickspencer32. $quickly add dialog dialogname18:27
rickspencer33. $quickly design18:27
rickspencer3ok, that's the power trip through glade18:27
rickspencer3and using it with quickly18:27
rickspencer3any questions?18:27
ClassBotastyguy asked: is there a front end for quickly for use with launchpad18:28
rickspencer3quickly quite integrates with launchpad18:29
rickspencer3I'll cover that int eh PPA section soon18:29
ClassBotbrunogirin asked: how much work would it be to create a kubuntu-project template?18:29
rickspencer3I thik I answered that one18:29
rickspencer3not too hard18:29
rickspencer3how about this one:18:29
rickspencer3QUESTION: do you have to use glade, or does quickly work with pygtk apps that don't use glade filez?18:29
rickspencer3so, you do have to use the generated glade files18:30
rickspencer3but if you want, you can just use good old python code to manipulate the contents18:30
rickspencer3I do this all the time18:30
rickspencer3so using Glade per say, is not required18:30
rickspencer3every window or dialog created with the ubuntu-project template has a builder object built in18:31
rickspencer3so you can easily go:18:31
rickspencer3and you have the main vbox for the window18:31
rickspencer3you can start packing and removing children like that18:31
rickspencer3let's talk coding a little18:32
rickspencer3I have a couple of points here18:32
rickspencer3I forgot to discuss signals18:32
rickspencer3signals are messages that your widgets send to your code18:32
rickspencer3they get hooked up automatically for you18:33
rickspencer3in glade, for an item in the editor, go to the signals tab of the editor for the widget18:33
rickspencer3choose the "event" in teh widget that you want to create a signal for18:33
rickspencer3then in the "handler" column, type the name for the handler that you want to use18:33
rickspencer3a handler is just a function in your code file18:34
rickspencer3it's a function that "handles" the signal18:34
rickspencer3for running a function when the user selects a certain menu item, for example18:34
rickspencer3create a handler in teh glade file for the "activated" signal18:35
rickspencer3then create a function of that same name in the code file for that window or dialog18:35
rickspencer3the handler signal should like this:18:35
rickspencer3def handlername(self, widget, data=None):18:35
rickspencer3so, some launchpad integration questions18:36
rickspencer3we'll get to that in a few minutes, but it is MUCH improved in 0.418:36
rickspencer3anyway, a couple of notes about writing quickly code18:36
rickspencer3but first, questions about signal handlers?18:36
rickspencer3so a quick tip or two18:37
rickspencer3first, for Windows and Dialogs in the quickly template18:37
rickspencer3don't write code in the __init__ function18:37
rickspencer3rather, add your initialization code to the finish_initializing function18:38
rickspencer3similarly, don't create instances of windows or dialogs directly18:38
rickspencer3so, don't go18:38
rickspencer3window = MyNamedWindow()18:38
rickspencer3this will blow up18:38
=== Jan is now known as Guest57338
rickspencer3rather use the New*Window() or New*Dialog() functions that come with each window or dialog18:39
rickspencer3for debugging, most people still just sprinkle print statements in their code18:40
rickspencer3we added logging code to the quickly template18:40
rickspencer3the idea being that you could use logging.debug(message) instead18:40
rickspencer3but this is busted atm18:40
rickspencer3we'll fix it before Lucid18:40
rickspencer3there is also a debugger called pdb (for python debugger)18:41
rickspencer3it works well, but is a bit complex18:41
rickspencer3note that $quickly edit18:41
rickspencer3will respect your default editor choices18:41
rickspencer3QUESTION: And what's the benefit of using logger instead of print?18:42
rickspencer3the advantage of logger is that you can cause it to only turn on using a command line switch18:42
rickspencer3so you can run your app like:18:42
rickspencer3$myapp -v18:42
rickspencer3and only with the "-v" will it print debug statements18:42
rickspencer3if you just use "print" and forget to delete them, whenever anyone runs the app they'll see your debug statements18:43
rickspencer3QUESTION: New* even for default dialogs like a simple message?18:43
rickspencer3use New* for Windows and Dialogs created by the ubuntu-project template18:43
rickspencer3this is necessary in order properly instantiate the window or dialog and cause it to use the UI definition from Glade18:44
rickspencer3this is a workaround for the way uibuilder works in pygtk atm18:44
rickspencer3any more questions about coding before we talk packaging and PPAs?18:44
rickspencer3QUESTION: any plans to include tasks for unit tests?18:45
rickspencer3yes, this would be sweet18:45
rickspencer3seems an easy matter to integrate trial into the templates18:45
rickspencer3would love to see that soon18:45
rickspencer3QUESTION so ground control is worth using with quickly ????18:46
rickspencer3atm the projects are not coordinated18:46
rickspencer3GC is really for the scenario of contributing to an existing project18:46
rickspencer3where as quickly is currently about you creating and sharing your own project'18:46
rickspencer3so for now, I would not mentally link them18:46
rickspencer3however, they both have a lot of Launchpad integration code18:47
rickspencer3and of course you would want folks to contribute to your project, right?18:47
rickspencer3so I think some convergence is in store for Lucid + 118:47
rickspencer3also note that GC is very early stage development18:47
rickspencer3I don't know that it will even be in universe for Lucid18:47
rickspencer3but it's a very important project, so I would watch it closely18:48
rickspencer3but in the meantime, if you are trying to get started with development, I would not conflate it with quickly18:48
rickspencer3s talk packaging18:48
rickspencer3there is a command that goes:18:48
rickspencer3$quickly package18:48
rickspencer3it is very forgiving18:49
rickspencer3it will create a deb for you without anyu configuration or mucking with Launchpad18:49
rickspencer3a deb is suitable for testing on other computers and such18:49
rickspencer3but let's talk about getting set up for packaging real quick18:49
rickspencer3there are a few items to take care of first18:50
rickspencer31. add your name and email to the copyright file18:50
rickspencer32. $quickly license18:50
rickspencer3this will add GPLv3 liscense to your code'18:50
rickspencer3by default, your application is in the Applications -> Accessories category18:50
rickspencer3you can change this in your appname.desktop.in file18:51
rickspencer3finally, edit setup.py to add your name, email, a description, a long descriptions, etc...18:51
rickspencer3this will make your deb a little nicer18:51
rickspencer3then do18:51
rickspencer3$quickly package18:51
rickspencer3and you'll get a nice deb18:51
rickspencer3QUESTION: Is the license always gplv3 or can you chose any foss license?18:52
rickspencer3you can choose among a set of FOSS liscenses18:52
rickspencer3I don't recall which are supported, but I bet that tab completion would show you18:52
rickspencer3once you have a deb, you can double click on it, and it will install your app in your desktop18:53
rickspencer3but then if you want to update your app, folks who installed it will have to find your deb and reinstall it18:53
rickspencer3sux, right?18:53
rickspencer3that's where PPAs come in18:53
rickspencer3there are a couple of problematic areas here18:53
rickspencer3first, PPAs are supposed to be secure, so they use encryption18:54
rickspencer3encryption means "close is not close enough"18:54
rickspencer3you have to be very precise in your setup18:54
rickspencer3here is a quick set of steps:18:55
rickspencer31. create ssh keys as per launchpad instructions18:55
rickspencer32. create pgp keys as per launchpad instructions18:55
rickspencer3be careful here18:55
rickspencer3Don't use a comment!18:55
rickspencer3after you have your keys set up, you want to tell your environment what it needs to know to use these keys18:55
rickspencer3set DEBEMAIL and DEBFULLNAME in .bashrc, the same as what was in your gpg key18:56
rickspencer3this should match what is in18:56
rickspencer3match gpg --list-secret-keys18:56
rickspencer3$gpg --list-secret-keys18:56
rickspencer3so I add this to the end of my ~/.bashrc files:18:56
rickspencer3export DEBEMAIL=rick.spencer@canonical.com18:57
rickspencer3export DEBFULLNAME=Rick Spencer18:57
rickspencer3of course, you need to create a PPA18:57
rickspencer3if you are using karmic/quickly 0.2.5, name your PPA "ppa"18:57
rickspencer3any other name won't work18:57
rickspencer3with 0.4 you can choose the ppa to target18:57
rickspencer3after you have that set up:18:57
rickspencer3$quickly share18:58
rickspencer3that puts your latest code into your PPA18:58
rickspencer3$quickly release18:58
rickspencer3does the same but also increments version and makes an announcement18:58
rickspencer3then folks can subscribe to your PPA18:58
rickspencer3also, don't forget to use:18:58
rickspencer3$quickly tutorial18:58
rickspencer3there is a good walkthrough there for getting an app going, and also some good links18:59
rickspencer3note that the tutorial is not updated yet for 0.418:59
rickspencer3QUESTION: Why we shouldn't use comment when generating our gpg key?18:59
rickspencer3because the template is not smart enough18:59
rickspencer3it guesses what key to use based on your name and email19:00
rickspencer3and the comment confuses it :/19:00
rickspencer3ok, I guess that's my time19:00
rickspencer3and head to #quickly for more questions!19:00
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - http://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Event: Ubuntu Op portunistic Developer Week - Current Session: Building in Application Indicator support - Sense Hofstede - Instructor: qense || Questions in #ubuntu-classroom-chat
qensethank you rickspencer3!19:01
qenseHello everyone! I'm Sense Hofstede and during the next hour I hope to learn you a bit about using Application Indicators in your application.19:01
qense[SLIDE 1]19:01
qenseThe slides for this session are located at <https://people.ubuntu.com/~qense/appind-session.pdf>.19:01
qenseIf you've got a question, don't hesitate to ask in #ubuntu-classroom-chat. Start your question with 'QUESTION:' so it can be found.19:01
qense[SLIDE 2]19:02
qenseFirst I'll talk a bit about what Indicator Application is and why you should use it.19:02
qenseAfter that we'll take a look at an example in Python, which I'm going to use to tell you about the way AppInd works.19:02
qenseThen I'll quickly explain the differences for other languages.19:02
qenseAt the end of the session there will be time for questions. If you want to port your or someone else's application to Application Indicator and got a question about that, please save those for then.19:02
qenseIt seems that I gave the wrong URL for the slides, people.ubuntu.comd eosn't suppoprt HTTPS, you want <http://people.ubuntu.com/~qense/appind-session.pdf> instead.19:03
qenseEveryone can get the slides now?19:03
qense[SLIDE 3]19:03
qenseThe purpose of Indicator Application is to give you a clean and consistent system tray.19:04
qenseThis is done by taking the drawing of the status icon and its menu away from the applications and make them request the Indicator Application service to do it for them instead.19:04
qenseWe are very strict, the only action allowed at the moment is the left mouse click, which spawns a menu. That is all, although we might see support for scroll events in the future.19:04
qenseFor more information I would like to point you to the links some of you can already see at the slides:19:05
qenseThat is the most important source of information.19:05
qenseAnd you've got:19:05
qenseand https://launchpad.net/indicator-application19:05
qense[SLIDE 4]19:07
qenseWhy should you all use Indicator Application?19:07
qenseOne of the reasons is that the protocol we use is an implementation of the notification specification as proposed by KDE and as implemented in KNotify.19:07
qenseThis means that  KDE applications using KNotify will show up in GNOME with native GTK+ menus and that applications using Indicator Application will show up in KDE with native Qt menus.19:07
qenseThe most important thing, however, is that the tray is now under control of one application, which is much easier to configure and theme.19:07
qenseThe behaviour of the tray icons is now consistent so users know what to expect.19:08
qenseIf there are any questions about what I've just told, now is the time to ask.19:08
qenseIf I'm going too fast, please let me know as well. ;)19:08
ClassBotstefodestructo asked: does this work in windows and osx?19:09
qenseNo, this works only on Ubuntu at the moment, and it could be built on other Linuxes as well. However, there is no port for Windows or Mac OS X and there is nothing like that planned either.19:10
ClassBottiteuf_87 asked: is this an applet in the gnome-panel or does it actually use the "normal" system tray to display?19:11
qensetiteuf_87: AppIndicator uses the Indicator Applet that was introduced in Ubuntu with the Karmic release.19:11
ClassBotPaulGit asked: If my application communicates with the indicator applet does it mean it will only run on Ubuntu and not other distros?19:12
qensePaulGit: Good question. AppIndicator uses the standard KDE proposed at FreeDesktop. This means that anything implementing that standard will support it. At the moment this just are KDE 4 and Ubuntu Lucid. For other distributions you'll need a fall-back, which is integrated in the library.19:13
qenseone last question19:14
ClassBotliems asked: Is it expected that this will be integrated into other distros?19:14
qenseThis depends on the other distributions. The developers are actively working with GNOME upstream, so we'll have to wait what the outcome of that will be.19:15
qensemore on fallback, categories and your other questions later this session19:15
qense[SLIDE 5]19:15
qenseWe're now going to take a closer look at the way Indicator Applications work.19:16
qenseKarmic users wanting to see what's coming next in action need to install AppIndicator from a PPA: ppa:indicator-applet-developers/indicator-core-ppa19:16
qenseWe're going to walk through an example to get a better understanding of the applet.19:17
qenseAt the wiki there are several examples in different languages. I've taken the Python example, adapted it a bit and uploaded it to19:17
qenseFirst we import appindicator module in Python:19:19
qenseimport appindicator19:19
qenseThe we start with initialising the indicator:19:19
qenseind = appindicator.Indicator ("example-simple-client", "indicator-messages", appindicator.CATEGORY_APPLICATION_STATUS)19:19
qenseThe first argument is a unique identifier for the application. It is used in the file ~/.config/indicators/application/lru-file.json -- where a few details of the application are saved -- to identify it.19:19
qenseThe second argument is the name of the icon that's to be used.19:20
qenseThe third argument is a category that at the moment is just saved, but in the future Indicator Application could be extended to present the icons in a better way using that information.19:20
qenseWe could e.g. sort the icons on category. Since we communicate with the applet over DBus other applications can listen in as well and process the tray icons if they would wish to. The categories are a possible filter.19:21
qenseHowever, at the moment the category not used.19:21
qenseYou can find a list of possible categories at the wiki page.19:21
qenseThe next line of code sets the status:19:22
qenseind.set_status (appindicator.STATUS_ACTIVE)19:22
qenseThere are three possible statuses, STATUS_ACTIVE, STATUS_PASSIVE and STATUS_ATTENTION, their meaning is: show, hide, show with the attention icon, which is set on the next line:19:22
qenseind.set_attention_icon ("indicator-messages-new")19:22
qenseAgain we're using an icon name, at the moment it is not yet possible to set the icon path in the Python bindings, but the developers are working on that bug.19:23
qenseIn C# you can provide a path as the fourth argument of the constructor, in C you use the function app_indicator_new_with_path() .19:24
qenseBy default we look in the icon theme for the icon.19:24
qenseNext thing we do in the code is creating a GtkMenu, we will later give it to the indicator.19:24
ClassBotM58 asked: Does it support pixmaps for icons?19:25
qenseM58: It does not, the design team has chosen not to do so in order to make sure the icons blend nicely with the theme.19:25
qenseAgain we're taking a bit power away from the application to make sure it integrates a bit nicer into the desktop.19:26
qenseBack to the menu: we tell appindicator about our menu with the following line of code.19:26
qenseSimple, not?19:26
qenseYou can reuse existing menus if you want.19:26
=== AndChat is now known as Guest59271
qenseSignals connected to the menu items will be sent to their handlers like they would do when the menu was a part of the application.19:27
ClassBotnadako70 asked: is gtkmenu actually used or is it only a sugar for creating some internal menu structure, so it can be recreated in qt by KDE applet?19:28
qensenadako70: The menu is sent to libappindicator as GtkMenu and there it is processed as a GtkMenu, but it is sent over DBus in a structure that is toolkit-agnostic so it is drawn by the native GUI toolkit in both GNOME and KDE.19:30
qenseDon't forget to show() the menu items!19:30
qenseThe little code I've pasted in this channel are about all method calls you have to make in order to set up an icon in the tray.19:31
qenseAre there any questions about what I've shown so far?19:31
ClassBotFredo asked: Are there only two possible icons for an application?19:32
qenseFredo: Yes, you can chose a default icon and another icon for when you want attention from the user.19:32
qenseThere was some discussion about adding a basic function to the library for showing numbers, e.g. on the icon, but I'm not sure if that will get implemented.19:33
ClassBotdael99 asked: what about adding items and connecting them with functions?19:33
qensedael99: First you create just a regular GtkMenu like you would do for a GtkStatusIcon, you can often reuse the old menu when porting an application.19:34
qenseYou add items, connect signals and then add the menu to the indicator.19:34
qense[SLIDE 6]19:35
qenseThe use of AppInd in other languages is pretty much the same,19:35
qensein C you initialise the indicator with 'app_indicator_new(const gchar*, const gchar*, AppIndicatorCategory)', in C# with 'new ApplicationIndicator(string, string, AppIndicator.Category).19:35
qenseor, if you want to provide an icon path, you can use app_indicator_new_with_path() in C19:36
qenseYou should be able to pass the icon path as the fourth argument of the C# constructor.19:36
ClassBotNilsR47 asked: Is user choice of having the tray icon or not built in, or do we have to code that ourselves?19:36
qenseNilsR47: Good you mention this. The design guidelines for the use of the AppIndicator ( https://wiki.ubuntu.com/CustomStatusMenuDesignGuidelines ) say that it is preferable to give the user the possibility to hide the icon from the tray.19:37
qenseHowever, this is not implemented in the applet.19:38
qenseYou're kindly asked to provide that option to the user by yourself.19:38
qenseHowever, since the tray is now controlled by one application it shouldn't be too hard to make it possible for the user to block an application there.19:39
qenseBack to the bindings in C and C#19:39
qenseIn C you need to include the following header file:19:39
qense#include <libappindicator/app-indicator.h>19:39
qenseThe pkg-config name of the C bindings is 'appindicator-0.1'.19:39
qenseThe package libappindicator-doc contains the documentation for the C library.19:40
qenseIn C# you need to import the AppIndicator assambly:19:40
qense'using AppIndicator;'19:40
qenseThe pkg-config name of the C# bindings is 'appindicator-sharp-0.1'.19:40
qenseCode examples for Python, C and C# -- the only three languages we're providing bindings for at the moment, work on Vala bindings is still ongoing -- can be found at the wiki page I mentioned a few times before already:19:40
ClassBotbananeweizen asked: I'd like to use the API from Java. What's my best chance to get that working? Implementing a JNI wrapper around the C library?19:40
qensebananeweizen: I'm not familiar with the procedure of generating Java bindings, so I'm afraid I can't help you with that. I do know that there is no one working on creating them at the moment.19:41
ClassBotdscassel asked: What's the relationship with the Indictator Applet? Are they going to be folded into Application Indicators? If I just want to say "Hey, there's new stuff!" should I use Indicator Applet or Application Indicators?19:41
qensedscassel: Although the the Indicator Applet listens to the Indicator Application service (and the users of KNotify) and is responsible for drawing the icons, we haven't put the tray in the indicator applet's envelope.19:43
qenseThey're drawn next to it, on the left.19:43
qenseA great resource for all three available bindings for libappindicator is its main wiki page19:44
qenseit contains an example for all three bindings and an example of Autotools code you can add to your project's configure.ac19:44
qenseEarlier I heard someone ask about the fallback support I mentioned earlier this hour.19:45
qenseFor the occasions where the Indicator Applet isn't reachable or when the user has chosen to remove it from her or his panel we provide a default fallback in two functions that can be overriden for those that want to implement a custom fallback.19:46
qenseThese functions are in C "fallback()" and "unfallback()" and in C# "ApplicationIndicator.Fallback()" and "ApplicationIndicator.Unfallback()"19:49
qenseHowever, overriding the ApplicationClass in C# isn't possible at the moment. This is a known bug and we're working on it.19:49
qense[SLIDE 7]19:49
qenseI've told everything I wanted to tell. Now I'm going to do a little Q&A. If your question doesn't get answered, or if you think of one later, please come to the #ayatana channel.19:49
qenseIf you want to use AppIndicator in your application, but need help, now is the time to ask. Later you can also ask in the #ayatana channel or in #ubuntu-app-devel . At 23.00 UTC every night this week there will be a hacking party on #ubuntu-app-devel, that is also a good place to ask.19:51
ClassBotliems asked: how long until the python bindings are feature-equivalent with the c/c# bindings?19:51
qenseliems: Of course it is impossible to say when specific bugs are fixed and features are ready. However, when the Python bindings lack in comparison with the C/C# bindings that is a bug and I would like to ask you to file it whenever you come across such a thing.19:52
ClassBotnadako70 asked: offtop: was it inspired by osx? i remember there was some consistency in top panel indicators provided by ichat, their network manager, etc.19:53
qensenadako70: It is certainly possible that some individuals partaking in the design process were influenced by what they saw on the Mac. However, I'm not aware that this is based on Mac OS's tray or was heavily inspired by.19:55
qenseThe inspiration for this was the fact that the tray is too cluttered and doesn't go well with your theme, often.19:56
ClassBotliems asked: Specifically, I'm interested in knowing when we can expect to be able to specify an icon path in python, and override fallback functions19:56
qenseliems: The goal is to fix as many of these bugs before the release of Lucid. I would recommend you to take a look at the indicator-application project on Launchpad. There is at least a bug report about the icon-theme-path not being supported by the Python bindings.19:57
ClassBotFredo asked: So is something like Rhythmbox’ tray icon, with several states like play, pause, stop, etc. out of the scope of AppInd?19:57
qenseFredo: Rhythmbox is already using AppIndicators. There are different icons used to display the state of the player. For that we use the app_indicator_set_icon() function19:58
qenseYou can also call the app_indicator_set_menu() function again when you've updated the menu.19:59
qenseMy time's up!19:59
qenseThank you all for listening!19:59
qenseAnd next is the incredible doctormo who will tell you more about Ground Control, you've heard a bit about that project already in the previous session.19:59
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - http://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Event: Ubuntu Opportunistic Developer Week - Current Session: Integrated development workflow with Ground Control - Martin Owens - Instructor: doctormo || Questions in #ubuntu-classroom-chat
doctormoHello everyone20:01
=== sam_ is now known as kidproquo
doctormoWe're here today to talk about Ground Control20:01
doctormoSo who here doesn't know what Ground Control is?20:01
doctormoSo traditionally to get into Ubuntu development, where you can collaborate with other members of the community20:02
doctormoYou'd have to set up a launchpad account, set up your ssh keys, learn bzr and do a lot of red tape in the launchpad website20:02
doctormoThe ssh keys was actually the biggest barrier in userbillity studies20:03
doctormoSo what I've done is I've created a project called Ground Control that intergrates into launchpad20:03
doctormoSorts out your ssh keys, oauth tokens20:03
doctormoThen provides an interface in nautilus for dealing with launchpad projects and bzr branches20:04
doctormoYou can see a demonstration video of the version 1.0 here: http://blip.tv/file/314162920:04
doctormoIn essence what we want to do is provide a way for _everyone_ to be able to use launchpad and the ubuntu desktop to create projects, get involved with existing projects and just feel more able to grab code and learn form it.20:05
doctormoDoes everyone have ground control installed?20:06
doctormohttps://launchpad.net/~doctormo/+archive/groundcontrol <- you can get it here20:06
doctormoSo the problem right now is that launchpad just changed it's login protocal to openid and groundcontrol is broken.20:07
doctormoThere isn't a lot we can do about that right now and since it's the configuration part, it's fairly useless without it.20:07
doctormoFor those who already had it installed and already logged in, you should be fine.20:08
doctormoBut I'm going to guess that we're all new here.20:09
doctormoRight, so you can't use it right now no.20:11
doctormoWhat we can do though is go through the work flow20:12
doctormoOK so I've given you guys a couple of mins to finish the video off20:15
doctormoWhen you first install GC (ground control), you will find a new menu item in your System > Preferences20:16
doctormoThis ground control configuration allows you to input your launchpad email address and password20:16
doctormoand have the service activate everything required for development20:16
doctormoIt will also create a ~/Projects directory for you to hold all your projects20:17
doctormoWhen you navigate to the Projects directory using nautilus file browser20:17
doctormoYou will see a bar at the top which says that you can [Create Project], [Fix a Bug] or [Fetch Project]20:17
doctormoThis allows you to step onto threee different workflows20:17
doctormoCreating a project will create the directories locally for setting up your new project.20:18
doctormoAs well as a new trunk branch20:18
doctormoThis you can then start filling in files, and making your project. Once your happy with it, you can commit the code and it will automatically create the project in launchpad.20:19
doctormoYou then can invite other people to download your project and see what you've written20:19
doctormoUsing the Fetch Project button20:20
doctormoThis create a directory for the project and allows you to then download branches of code associated with the project.20:20
doctormoDon't worry if you don't see Create Project, it's a new feature so older stable releases don't have it yet.20:21
doctormoAfter downloading the code they can modify files and commit them back into launchpad under a different name from your trunk branch.20:21
doctormoThen ground control will offer them a merge request button20:22
doctormowhich sends off a ticket to the original developer saying that this fix or addition is finished and needs to be submitted.20:22
doctormoIf it's your project, then you won't want to merge in your own changes, but instead will be merging in other peopole's20:23
doctormoFor that there is a button [Merge In] which allows you to see a list of all the merge requests and select from them which should be merged in and tested locally by you.20:24
doctormoOnce your happy with the modifications someone els ehas made20:24
doctormoYou can commit them like you usually would using the [Commit Changes] button.20:24
doctormoThe [Fix Bug] button is a special workflow20:25
doctormoIt allows you to select from a list of a project's open bug reports and have it download the trunk branch in preparation for you to try and fix it.20:25
doctormoWhen you've fixed it, it commits the code, attaches the branch to the bug report and uploads the code with a merge request all in one action.20:26
doctormoAny questions so far?20:26
doctormo<M58> QUESTION: Does [Fix Bug] install packages required to build the project?20:27
doctormoM58: No, not yet, but there are plans afoot for that.20:27
doctormo<diplo> doctormo, I  already have a dir called ~/Projects, does this directory only have to have code for Ground Control or is it happy to co-exsist ?20:27
doctormoYou can have an existing Projects directory, it won't interfere.20:27
doctormoIt's based on context, so if you put the .groundcontrol file into another directory, you'll then be using that directory as your base of operations.20:28
doctormo<doliomp95> QUESTION: When I hit [Fix Bug] is there anyone informed about my try to fix this bug? I mean, what happens if I just decide to leave it alone, will someone wait for me to fix this bug?20:29
doctormodoliomp95: There is no notification in the bug report that you've downloaded the code to fix the bug. Not until you've submitted the fix will it notify anyone.20:30
doctormo<bananeweizen> QUESTION: Is there any "sandbox" project for people wanting to try ground control for the first time? I really want to change typos, missing translation markers and other things in some projects but I'm afraid of making errors in the process.20:31
=== AndChat is now known as Guest7408
doctormobananeweizen: Don't worry! when you upload your fix it goes into it's own seperate branch, no matter how baddly you foul it up in your first fix, the developers will let you know that _your_ branch is broken in some way and how to avoid it in future.20:32
doctormobananeweizen: You can then redownload the branch and try and fix it again, or correct the problems in your first one20:33
doctormoBecause the code your submitting is your own personal copy20:33
doctormoIt doesn't interfere with the originals20:33
doctormoOnly once your fix is good, working etc will the developers merge in your changes to their central development branch.20:34
doctormo<M58> Is there a KDE version?20:36
doctormoM58: Not yet, KDE is very different and if the project had been made to work on both it might not have been possible.20:36
doctormoM58: I don't know if a KDE version is possible, but the project would need a dedicated kde developer to kick it off.20:36
doctormo<wilsonliam> QUESTION: How long will it be until new users are able to log in, fo you think?20:37
doctormowilsonliam: I'm hoping to get the bug fixed today or tomorrow and then put a release out of 1.620:37
=== Goomba is now known as Guest64151
doctormoIf you can all sign up to my blog http://doctormo.ubuntu-ma.us you'll get a notification when it's done.20:38
doctormoand I am sorry about that, it's a very recent change in launchpad and it just goes to show.20:38
doctormoOK so are there any other questions about workflow, bzr, launchpad or functionality?20:40
doctormo<w1nGNUtz> QUESTION: how developers merge code? Launchpad provide any tool for that you it is done via GC?20:42
doctormow1nGNUtz: Developers can merge in code using the [Merge In] button that appears in your directory when you have commited all your changes and you own the branch (it's important thtat you own the branch)20:43
doctormo<titeuf_87> QUESTION: for more popular projects, what will happen if there are tons of branches from people messing around with it but abandon those branches? Will they just stay there?20:43
doctormotiteuf_87: All branches will stay, but most branches will get marked as abandoned and so won't appear in the listings.20:43
doctormo<M58> QUESTION: What if there is conflict during merge?20:45
doctormoM58: Currently you will have to resolve conflicts manually.20:45
doctormoBut there is already an open bug report for it https://bugs.launchpad.net/groundcontrol/+bug/51453120:46
doctormo<w1nGNUtz> QUESTION: Is there any way to update the baseline like, svn update for svn?20:46
doctormow1nGNUtz: There is an [Update] button that appears when you have no local changes, this allows you to re-pull to the parent.20:46
doctormoOK we got 10 more mins of questions, or I can worrble on about how great ground control is :-) ... will be when it's fixed.20:47
doctormoSo what we're hopefully going to be able to do with ground control, is develop a real difference in the way we get people collborating20:49
doctormoBecause we want graphics project, writing projects, all sorts of ubuntu projects that isn't just related to programming20:49
doctormoNow, one feature which I haven't explained yet, is for project managers. This allows you to specify script actions for your branches, so for isntance if you get the loco directory project code, it has a button to sync the database or run the server. These are configured in a .gcfunctions file int he code.20:51
doctormoYou can see this explained here: http://doctormo.ubuntu-ma.us/2010/02/15/groundcontrol-1-5-%E2%80%93-custom-scripts-and-bug-fixes/20:51
doctormo<wilsonliam> QUESTION: Say if you and someone else are working on the same branch, and you both commit the changes at a similar time, would this cause a conflict, or would it merge the two together?20:51
doctormowilsonliam: If you are both working on the same branch (which you shouldn't be) one of you will experence an error saying that your local copy isn't up to date20:52
doctormowilsonliam: Then you will have to press the [Update] button to merge back in all changes just made and hopefully you won't get any conflicts. But it's the Update section is where you will experence those.20:53
doctormoOnce your up to date, you can commit and push as you normally would.20:53
doctormoOK, 5 more minutes.20:54
doctormoI think we're done here then. Thank you all for coming and asking such good questions20:55
doctormoI'm sorry about the breakage, hopefully when it's fixed you'll give it a go and let me know what you think.20:55
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - http://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi
=== NVSBLmonstr is now known as nvsbl
=== NVSBLmonstr is now known as nvsbl

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!