/srv/irclogs.ubuntu.com/2012/02/02/#ubuntu-classroom.txt

TheYsNoi_hi there00:08
ysnoichecking00:15
=== ysnoi is now known as TheYsNoi
dnewkirkexit00:36
metasansanared green01:25
metasansanagreen red01:25
raju#ubuntu-irc01:36
rajuaah i am sorry command  command problem ,really sorry01:37
BlueProtomanAnyone here mind helping me out with my hardware acceleration?  I still can't get it working.  Ubuntu 11.04, Intel HD 3000 and nVidia GeForce 520M, both controlled via Optimus.  I've tried this https://github.com/Bumblebee-Project/Bumblebee/wiki/Troubleshooting and https://github.com/Bumblebee-Project/Bumblebee/wiki/Upgrading-on-Ubuntu , and after resetting numerous times I still have no luck.02:11
=== dduffey is now known as dduffey_afk
TheYsNoilunch break..03:55
=== muthusuba_ is now known as muthusuba
=== AndrewMC is now known as SpockVulcan
TheYsNoiinstalling hoN04:59
ashickur-noorWhat is BTW?05:00
ashickur-noor*this05:01
=== liquid is now known as Guest24219
TheYsNoiby the way?05:39
=== warp11 is now known as warp10
=== Partyschaum^away is now known as Partyschaum
lexiadmin?09:42
=== zyga_ is now known as zyga-xchat
=== yofel_ is now known as yofel
=== manishrw is now known as manish_rw
Pritam_chaingangh12:33
Pritam_chaingangme wiki12:34
Pritam_chaingangwhois12:34
Pritam_chaingangWHOIS12:34
Pritam_chaingangnick Pritam_chaingang12:34
rajuPritam_chaingang:  may i help you ? here this channel is for classroom session12:35
Pritam_chaingangquit12:40
Pritam_chaingangQuit12:40
Pritam_chaingangyes yes12:46
Pritam_chaingangi am not able to enable my wireless in ubuntu12:46
Pritam_chainganghow do i do that12:46
Pritam_chaingangit was working before12:47
sbtePritam_chaingang, please ask your questions about Ubuntu in #ubuntu12:48
Pritam_chaingangquit12:56
Partyschaumlol12:57
Pritam_chaingangCHAT13:03
Pritam_chaingangwhen is the class13:05
PartyschaumPritam_chaingang: see topic13:15
Pritam_chaingangthanks13:16
=== SpockVulcan is now known as AndrewMC
AbvayadHello14:12
Abvayad.14:15
tachyons.14:20
metasansana:P14:25
=== dduffey_afk is now known as dduffey
=== metasansana is now known as serious_sam_the_
=== serious_sam_the_ is now known as sstmtp
seb128hey14:51
nigelbHeya! :)14:52
abvayadl14:54
dholbachWelcome everybody to day 3 of Ubuntu Developer Week!14:55
dholbachBefore I hand over to seb128, here a few organisational bits14:56
dholbachIf you haven't joined #ubuntu-classroom-chat yet, please do it14:56
dholbachit's where we chat and ask questions14:56
dholbachand if you do ask questions, please prefix them with QUESTION:, ie:14:56
dholbachQUESTION: What should be the default language in Ubuntu?14:56
dholbachalso, check out https://wiki.ubuntu.com/UbuntuDeveloperWeek because we added logs for all the sessions which happened yesterday and the day before14:57
dholbachand tomorrow morning I'll go and add session logs for today14:57
dholbachHow has UDW been for you up until now? :)14:57
dholbachI'm glad at least one person is answering in #ubuntu-classroom-chat ;-)14:59
dholbachyou all have 2 minutes left to wake up or get something to drink before my good friend Sébastien seb128 Bacher takes over14:59
dholbachenjoy! :)14:59
seb128oh, drink!14:59
* seb128 grabs a glass for water14:59
seb128dholbach, hey btw, how was *your* week? ;-)15:00
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Fixing Desktop bugs - Instructors: seb128
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2012/02/02/%23ubuntu-classroom.html following the conclusion of the session.15:00
seb128ok, it's time to start15:00
seb128thanks everybody for joining15:00
seb128I'm Sebastien Bacher and working in the Ubuntu Desktop Team15:01
seb128I will show you a bit of what you do in the desktop team today15:01
seb128first some infos, you can find us on #ubuntu-desktop on this IRC channel15:01
seb128or that mailing list: https://lists.ubuntu.com/mailman/listinfo/ubuntu-desktop15:02
seb128feel free to join to ask question, participate to discussion or help doing work ;-)15:02
seb128so let's get started, what we do in the desktop team is basically keeping the desktop in shape15:02
=== Tachyons is now known as tachyons
seb128which means15:02
seb128- keeping the components updated15:03
seb128- fixing bugs15:03
seb128- looking to your bug reports15:03
seb128- talking to our upstreams (GNOME, Debian, dx, etc)15:03
seb128you can find some pointers and documentation on https://wiki.ubuntu.com/DesktopTeam/15:03
seb128I will first walk you through a backport of an upstream GNOME git commit to one of our packages15:04
seb128note that the desktop team packages use a different workflow for most part than the "UDD" new standard workflow15:04
seb128the reason are basically that it works better for us still and we wait for a few extra issues to get sorted with UDD (mostly quilt handling and download times)15:05
seb128you can read https://wiki.ubuntu.com/DesktopTeam/Bzr to get some details on our workflow15:05
seb128so15:05
seb128let's start by fetch a source15:05
seb128we will use gnome-control-center in that example15:05
seb128for that you usually want to use "debcheckout <source>"15:05
seb128$ debcheckout gnome-control-center15:06
seb128in this case15:06
seb128which should give you something around those lines15:06
seb128bzr branch http://code.launchpad.net/~ubuntu-desktop/gnome-control-center/ubuntu gnome-control-center ...15:06
seb128then it's downloading the source for you15:06
seb128wait a bit for that to be done and you should get that:15:07
seb128$ ls15:07
seb128gnome-control-center15:07
seb128gnome-control-center_3.2.2-2ubuntu5.debian.tar.gz15:07
seb128gnome-control-center_3.2.2-2ubuntu5.dsc15:07
seb128gnome-control-center_3.2.2.orig.tar.bz215:07
seb128the first one is a checkout of the vcs directory15:07
seb128the other files are the source package from the archive15:07
seb128 15:07
seb128let's have a look to the dir15:08
seb128hum, demo effect, that didn't do what I wanted today on precise15:09
seb128will have to look into that15:09
seb128so what it should have done and what I'm doing now it's what it wrote15:09
seb128which is basically15:09
seb128bzr branch lp:~ubuntu-desktop/gnome-control-center/ubuntu g15:10
seb128bzr branch lp:~ubuntu-desktop/gnome-control-center/ubuntu15:10
seb128ok, now I got what I wanted ;-)15:10
seb128let's visit that directory15:10
seb128cd ubuntu15:10
seb128$ ls15:10
seb128debian15:11
seb128so you get a debian dir there, it's where we will do our work15:11
seb128to continue you will need the bzr-builddeb and the build-depends of gnome-control-center15:11
seb128so assuming that you have the deb-src for oneiric or precise enable you can type those commands15:11
seb128sudo apt-get install bzr-builddeb15:12
seb128sudo apt-get build-dep gnome-control-center15:12
seb128the second one will install all the Build-Depends for gnome-control-center, i.e what you need to build it15:12
seb128now you should be set15:13
seb128so we are in the debian directory15:13
seb128rather in the ubuntu dir15:13
seb128bzr bd-do will give you a shell environement where you can do changes15:13
seb128whatever change you do that in the debian directory will be applied to the vcs checkout you did when you exit 015:14
seb128if you exit with something else than 0 you will not get the changes copied over15:14
seb128let's assume for the exercice than we want to backport the fix from http://git.gnome.org/browse/gnome-control-center/commit/?h=gnome-3-2&id=81fb28de5cf8708932224f482a8923322191b00f15:16
seb128ie http://git.gnome.org/browse/gnome-control-center/patch/?id=81fb28de5cf8708932224f482a8923322191b00f15:16
seb128so you did bzr bd-do and are in an unpacked source of gnome-control-center15:16
seb128let's save the content of that commit in a file, name it git_backport_printer_fix.patch15:18
seb128new you do15:18
seb128quilt import git_backport_printer_fix.patch15:18
seb128Importing patch git_backport_printer_fix.patch (stored as git_backport_printer_fix.patch)15:19
seb128 15:19
seb128the patch is imported15:19
seb128let's check that it applies well15:19
seb128$ quilt push15:19
seb128Applying patch git_backport_printer_fix.patch15:19
seb128patching file panels/printers/cc-printers-panel.c15:19
seb128Now at patch git_backport_printer_fix.patch15:19
seb128 15:19
seb128it does15:19
seb128let's refresh it15:19
seb128$ quilt refresh15:19
seb128Refreshed patch git_backport_printer_fix.patch15:19
seb128so all good15:20
ClassBotThere are 10 minutes remaining in the current session.15:20
seb128we have our patch, it applies to our package and we refresh it15:20
seb128we are happy about it15:20
seb128we can exit15:20
seb128$ exit 015:20
seb128it bring you back to your vcs dir15:20
seb128let's see where we stand15:21
seb128$ bzr statusmodified:15:21
seb128  debian/patches/series15:21
seb128unknown:15:21
seb128  debian/patches/git_backport_printer_fix.patch15:21
seb128ok15:21
seb128so the series got updated, and we have a new file15:21
seb128$ bzr diff15:21
seb128=== modified file 'debian/patches/series'15:21
seb128--- debian/patches/series2012-01-25 16:38:52 +000015:21
seb128+++ debian/patches/series2012-02-02 15:18:21 +000015:21
seb128@@ -25,3 +25,4 @@15:21
seb128 93_change_window_role_on_panel_change.patch15:21
seb128 94_git_adding_shortcuts.patch15:21
seb128 95_git_ctrlw_shortcut.patch15:21
seb128+git_backport_printer_fix.patch15:21
seb128 15:21
seb128the patch got added to the serie15:21
seb128we need to add the file to the vcs, that was not done for us15:21
seb128so we use15:21
seb128$ bzr add debian/patches/git_backport_printer_fix.patch15:22
seb128adding debian/patches/git_backport_printer_fix.patch15:22
seb128at this point we are mostly good15:22
seb128we need still to update the changelog15:22
seb128type15:22
seb128dch -i15:22
seb128and write a changelog entry15:22
seb128 * backport fix from git (lp: #...) for example15:22
seb128then you can bzr diff again15:22
seb128you get a new revision with a backported patch ready to test!15:22
seb128now to test it's easy, run bzr bd15:22
seb128it will build the new version for you15:23
seb128if you don't have a gpg key matching your changelog email don't worry, it will warn you about that, that's ok15:23
seb128your deb are in ../build-area after the build15:23
seb128you can go there, sudo dpkg -i *.deb and try the new version15:23
seb128if you are happy with the change go back to the ubuntu dir15:24
seb128$ bzr commit15:24
seb128to commit you work15:24
seb128then15:24
seb128$ bzr push lp:~yourlaunchpadid/gnome-control-conter/my-fix15:24
seb128$ bzr lp-submit to do a merge proposal15:24
seb128and wait for us to review your work ;-)15:25
seb128 15:25
ClassBotThere are 5 minutes remaining in the current session.15:25
seb128ok, that was basically it for a patch backport, 5 minutes left15:25
seb128questions?15:25
ClassBotdholbach asked: Will Wanda the Fish ever come back?15:25
seb128dholbach, it's still in gnome-panel upstream, you can "free the fish" in the dash but it's not as cool as the vuntz' version I've been told and will not go around you screen ;-)15:26
ClassBotjincreator asked: I tried debcheckout but only get debian folder, not having ,dsc, .debian.tar.gz, .orig.tar.bz2.15:26
seb128jincreator, that's probably better, seems the tools changed behaviour in precise which confused me15:27
seb128you probably got the equivalent of my second command15:27
seb128 15:27
ClassBotali1234 asked: don't you need to export QUILT_PATCH_DIR?15:27
seb128good point, I'm sorry about that15:27
seb128it's one of those suboptimal thing you have to do, I did it years ago and forgot :p15:27
seb128you need to "export QUILT_PATCHES=debian/patches"15:28
seb128put that in your environement then you can forget about it like me :p15:28
seb128 15:28
ClassBotali1234 asked: what if the package doesn't use quilt but something else?15:28
seb128I couldn't cover all the patch systems there15:28
seb128you can use edit-patch (great tool that mvo wrote) than wrap around the different patch systems15:29
seb128it will do the quilt magic for you, or call cdbs-edit-patch or similar15:29
seb128 15:29
seb128one minutes left and no question15:29
seb128seems we are good ;-)15:29
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Triaging Desktop bugs - Instructors: om26er
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2012/02/02/%23ubuntu-classroom.html following the conclusion of the session.15:30
om26erHey! should we start15:31
om26erHello! my name is Omer Akram. I have been in Ubuntu since mid 2009 and have been active in the community since then. I am a Ubuntu BugSquad and Bug control member. I also am a Bug Triager for Unity and the related projects. I had my first ever date yesterday <315:31
om26erSo in this session I am going to discuss about how to triage desktop bugs efficiently. We receive hundreds of Bug reports in Ubuntu daily. There are basic two types of Bugs. 1 functionality problem 2 Crash :-)15:32
om26erthe crash are the dangerous ones and are mostly hard to fix15:32
om26erA bug in a software is a fault that creates problems for people using it, it could be visual, functional etc15:33
om26erThe role of Ubuntu bugsquad is to complete bug reports. i.e. to add any missing information, clear up the description of the bug report and make the report clean and simple so that the developers spend more time in fixing the issue then looking through bugs.15:33
om26erI have in bugsquad long enough I believe, we always get new contributors some who really do triage like crazy for so many hours15:34
om26erBugs with proper steps to reproduce are the one's that really are USEFUL bugs or if they have a proper crash stacktrace.15:34
om26erthe steps to reproduce are really very important15:35
om26erthere are like 90000 bugs logged in launchpad and I believe there are many of those useless15:35
om26eri.e. the reporters didn't care to report enough details etc15:35
om26erlets say for example this bug https://bugs.launchpad.net/ubuntu/+source/unity/+bug/90434815:36
=== ublinx is now known as jmarc
om26erthe reporter reported the bug and did not bother to mention the problem really15:36
om26erits totally not related to Unity and needs to be relocated to some other package, he didnot mention detailed when the problem started15:37
om26erso our (BugSquad15:37
om26erresponsibility here is that we should inquire the reporter to send more information about the issue so that the bug can be triaged easily15:37
om26erWe do not handle questions in Bug reports so please people don't ask questions in Bug reports we have an answers section in launchpad for that.15:38
om26erthe above was one example of useless bugs ;)15:39
om26erSometimes people throw a bunch of issues into one single bug report that is really not a good thing when reporting a bug.15:39
om26erthats another type15:39
om26erour most beloved type is ofcourse called the RANT type :p15:39
om26erso to talk business, if you are want to start help Ubuntu Bug triage could be a good entering point15:40
om26ersince you learn alot while triaging bugs, a bit about branches and stuff15:41
om26erIf you are starting/thinking to start helping in Ubuntu bug triage you should join the Ubuntu BugSquad that is the team to handle bug reports in Ubuntu.15:41
om26erMost of the bugs in Ubuntu are Upstream15:41
om26erwhats upstream?15:41
om26eractually every software have an upstream :P15:42
om26erupstream means the developers the people writing the software15:42
om26erSO out bugs need to be sent to the package's upstream15:42
om26erEmpathy for example our chat client in Ubuntu have the nice batch of developers, who are really helpful and quick to response.15:43
om26erbugs reported by Ubuntu users in Launchpad for empathy need to be sent to bugzilla.gnome.org where the empathy upstream project is hosted15:44
om26er(oh boy I feel I am typing quite fast, never really typed that much)15:44
om26erthe upstream developers would fix bugs which they understand so if people report useless bug reports you should not send the report straight upstream you should first try to get a good set of information from the reporter in launchpad and then send the bug to Bugzilla so that the developers don't get headaches ;-)15:45
om26erwe really need to keep our upstreams happy15:46
om26erI actually think if someone, A Ubuntu user really wants to help Ubuntu he/should just go to software-properties and enable the -proposed repository and help test the proposed bug fixes15:47
om26erthis is a very useful guide about how to triage: https://wiki.ubuntu.com/Bugs/HowToTriage/15:47
om26erI read it quite a lot when I was applying for Ubuntu bug control15:48
om26erso who are Bug Control15:48
om26erwell they are the next step after bugsquad, bug control people are those who set importance to bug reports, and assign bugs to developers and nominate bug for any specific release15:49
ClassBotThere are 10 minutes remaining in the current session.15:50
=== ANDRES is now known as Guest38400
om26erWe use stock responses for bug reports for example If a bug report is missing its steps to reproduce I would not just go and say "you are missing the steps to reproduce the problem"15:51
om26erbut we choose a more respectful approach and use the stock responses for Bugs  https://wiki.ubuntu.com/Bugs/Responses15:51
om26erso for this specific case of missing steps we use:15:52
om26erThank you for taking the time to report this bug and helping to make Ubuntu better. Please answer these questions:15:52
om26er* Is this reproducible?15:52
om26er* If so, what specific steps should we take to recreate this bug?15:52
om26erThis will help us to find and resolve the problem.15:52
om26erI remember a few of the initial bugs I reported in Ubuntu so the response came very humble from seb128 that the issue was upstream one and I should report it there...15:53
om26erI really was like these are good people they respect.. this is what I got the first reply for my very intial bug report15:54
om26er.15:54
om26erThank you for taking the time to report this bug and helping to make Ubuntu better. The issue you are reporting is an upstream one and it would be nice if somebody having it could send the bug to the developers of the software by following the instructions at https://wiki.ubuntu.com/Bugs/Upstream/GNOME. If you have done so, please tell us the number of the upstream bug (or the link), so we can add a bugwatch that will inform us about its st15:54
om26eratus. Thanks in advance.15:54
ClassBotThere are 5 minutes remaining in the current session.15:55
om26erthat thanks 2 times really inspired me, these Ubuntu people are so kind. so these responses really matter15:55
om26erin summary, a useful bug report is the one that is reprodueable with steps15:57
om26era useful bug report have a visual attached i.e. a screenshot or video to show the problem15:57
om26era good bug report is easy to understand15:57
om26erNow a good BugTraiger is the one who is patient15:57
om26ersince the reporters can sometime really be Pain in... :D15:58
om26erDesktop bugs needs YOU15:58
om26erUbuntu needs You :)15:58
om26ernew contributors are always welcome15:58
=== fenris is now known as Guest60985
om26erlook at me I only triaged bugs and now I am a Ubuntu Member, Gnome Foundation member and Work for Canonical15:59
om26er(well contract for canonical :p)16:00
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Simple Lenses with Singlet - Instructors: mhall119
om26erI guess the time is ending16:00
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2012/02/02/%23ubuntu-classroom.html following the conclusion of the session.16:00
mhall119thanks om26er16:00
mhall119bug triaging really helps developers keep up, and anybody can do it16:01
mhall119alright, welcome everybody16:01
mhall119so what is Singlet?16:02
mhall119well, it's a python library for writing Unity lenses16:02
mhall119but Lenses are just DBus and GObject, they don't *need* a dedicated python library16:03
mhall119in fact, many community lenses are already being written in python withut Singlet16:03
mhall119so then, why Singlet?16:03
mhall119because as a Python developer, I hate GObject and DBus16:04
mhall119it's not that they're bad technologies, it's just that they're not "pythonic"16:04
mhall119so using them in python feels unnecessarily complicated16:04
mhall119I wrote my first 2 Unity lenses using them, and Singlet developed out of that16:05
mhall119so Singlet itself works to hide all of those non-pythonic bits from you, so as a developer you get a nice, clean, simple interface16:06
mhall119Singlet does this with a combination of traditional object-oriented abstraction, and a bit of Python meta-class programming16:06
mhall119http://mhall119.com/2011/12/writing-unity-lenses/ gives an introduction and has some example source code16:06
mhall119whoops, wrong link16:07
mhall119http://mhall119.com/2012/01/simplified-unity-lens-development-with-singlet/16:07
mhall119that one16:07
mhall119if anybody here has done any Django programming, it should look familiar to you16:07
mhall119that's because I borrowed heavily form the way Django used simple Python classes as models, and from there can automatically do a lot of the boiler-plate work for you16:08
mhall119Singlet does the same, you give it a little meta-data to describe your lens16:08
mhall119define some categories16:08
mhall119and then implement the search() method16:08
mhall119and behind the scenes it's instantiating the GObject classes you'll need and connecting everything to DBus for you16:09
mhall119Singlet also includes helper commands for running your Lens as a daemon process, and generating the .lens and .service files needed to install it, all from the meta-data you provide16:10
mhall119any questions so far on what Singlet is?16:10
mhall119alright, moving along16:11
mhall119the example given in http://mhall119.com/2012/01/simplified-unity-lens-development-with-singlet/ shows how to make a simple Lens with one built-in Scope16:11
mhall119if you attended davidcalle and mhr3's Lens session on Tuesday, you'll know that they can either exist in the same code, or separate code16:12
mhall119In Singlet 0.1, which only works on Oneiric, this was all it could do16:12
mhall119but Singlet 0.2, which was upgraded for Precise, introduces the ability to separate them16:13
mhall119http://mhall119.com/2012/01/singlet-part-0-2/16:13
mhall119Singlet 0.2 is being packaged for Precise, and will be available in the default repositories16:13
mhall119this means you can write lenses and scopes that use Singlet, and make them easily installable16:14
mhall119Now you don't *have* to use Singlet to write a Python lens, but it cuts the amount of code you need to write to get one started in half16:15
mhall119and it also means that you have a compatibility layer between your code and any possible API changes16:15
mhall119for example, in the move from Unity 4(Oneiric) to Unity5(Precise), the Lens API changed16:15
mhall119but Singlet's API didn't16:15
mhall119so a Lens written for Singlet 0.1 on Oneiric would be able to run without modification on Singlet 0.2 on Precise16:16
mhall119As for packaging, sometime soon we will have a Quickly template for writing Singlet lenses and scopes16:18
mhall119for anybody not familiar with Quickly, it's a tool for rapid application development16:18
mhall119it'll create any files and directories you need to get started on a specific kind of project (like command-line program, desktop app, or Unity lens)16:19
mhall119it also provide packaging files for you, so that your app can be uploaded to the Ubuntu Software Center16:19
mhall119there are already  a handful of Unity lenses and scopes in the Software Center16:19
ClassBotThere are 10 minutes remaining in the current session.16:20
mhall119and with Singlet + Quickly, we'll open the door for opportunistic developers to put together lenses that will feed their desired content directly into the Unity dash16:20
mhall119Lenses are one of the most exciting and unique features for extending Unity, and I expect to see a large number of them being developed for Ubuntu 12.0416:21
mhall119and, hopefully, a large number of them will be doing it with Singlet16:21
mhall119alright, any questions before I'm out of time?16:21
mhall119alright, thanks to those you attended16:23
mhall119anybody interested can get the project and code from https://launchpad.net/singlet16:24
mhall119and the above blog entries will serve as a tutorial for writing Singlet lenses and scope, at least until I can put a more formal tutorial together16:24
ClassBotThere are 5 minutes remaining in the current session.16:25
mhall119alright, I guess I'll turn things over to tumbleweed then16:27
* tumbleweed waves16:27
tumbleweedI was still writing some notes, but no reason not to start a couple of minutes early :)16:28
tumbleweedHi everyone,16:28
tumbleweedSome of you may have been at the session I took yesterday afternoon, on working with Debian16:28
tumbleweedFor everyone else, hi, I'm Stefano Rivera, an Ubuntu MOTU and Debian Developer16:28
tumbleweedI'm here to talk to you about building packages locally with pbuilder16:28
tumbleweedIf you followed Daniel Holbach's introduction on Tuseday, you'll have already set up pbuilder, using pbuilder-dist. https://wiki.ubuntu.com/MeetingLogs/devweek1201/DevEnvironmentSetup16:28
tumbleweedIf you haven't, install ubuntu-dev-tools and pbuilder right now, and run "pbuilder-dist precise create" (it'll take quite a while)16:28
tumbleweedMaybe you'll be done by the end of the session... :)16:29
tumbleweedAs you can imagine from its name, pbuilder is a tool for building Debian packages16:29
tumbleweed(Ubuntu packages aren't any different)16:30
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Building locally with pbuilder - Instructors: tumbleweed
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2012/02/02/%23ubuntu-classroom.html following the conclusion of the session.16:30
tumbleweedaha, we've officially started now16:30
tumbleweedIf you haven't used pbuilder before, you make wonder what the point is: Anyone can just build a source package by extracting it and running debuild, right?16:30
tumbleweedWell, you need all the build dependencancies installed, so you're machine will quickly end up with lots of packages that you don't really need installed.16:31
tumbleweedYour machine will have packages installed in it that the official build machines don't16:31
tumbleweedAll packages in the main archive are built in restricted build environments on buildds (build machines)16:31
tumbleweedso, just building locally with debuild may give different results16:32
tumbleweed(with well behaved packages it doesn't, but we probably spend more time on the badly behaving ones, right? :)16:32
tumbleweedThe buildds run a program called sbuild to do the builds. It installs the build dependencies in a minimal chroot, builds the package, and then throws away the chroot16:32
tumbleweedWe'd like to have a similar environment for testing builds16:32
tumbleweedSomething we can use to find likley build failures before we upload16:33
tumbleweed(you do test before uploading, right?)16:33
tumbleweedand to help us debug failures16:33
tumbleweedLaunchpad has PPAs, using the same build systems an the primary Ubuntu archives, why do you need to build things locally?16:33
tumbleweedWell, there are a few reasons:16:33
tumbleweedLaunchpad's PPA builders can get rather backed up, sometimes the queue gets as long as a few days (currently they are quite short, though: https://launchpad.net/builders )16:33
tumbleweedYour machine is probably faster than some of the buildds (at least mine is :P )16:34
tumbleweedYou don't have to bump the version every time you want to try a build16:34
tumbleweedYou can log into the build environment and debug things, when they go wrong16:34
tumbleweed^ That one is the killer feature16:34
tumbleweedSo, we want to set up a reproducable minimal build environment locally, that we can use for testing package builds and debugging them16:34
tumbleweedYou could use sbuild, like the buildds, or you could use pbuilder, which is simpler and easier to customise.16:34
tumbleweedere's also cowbuilder, which is a "faster pbuilder", but I won't bother going into that, if you're reaching the limits of pbuilder, I suggest also looking at sbuild16:35
tumbleweederr "There's"16:35
tumbleweedPersonally, I build everything with sbuild, but I'm here to talk about pbuilder, so that's what I'm doing :P I used to use it, there's nothing wrong with it16:36
tumbleweednow seems to be a good time to see if I've actually got an audience16:36
tumbleweedanyone currently building a pbuilder chroot?16:36
tumbleweedanyone run into trouble already?16:36
tumbleweedSo, details:16:37
tumbleweedWhat pbuilder does:16:37
tumbleweedWhen you create a chroot, it debootstraps a clean install into a directory (debootstrap is a very low level tool for minimal Debian/Ubuntu installs)16:37
tumbleweedIt then packs up that directory into a tarball.16:37
tumbleweedWhenever you do a build, it upacks that tarball, chroots into the unpack directory, and does the build.16:37
tumbleweedThe directory can be deleted afterwards16:37
tumbleweed(It's worth noting that sbuild used to be far more complicated, using LVM, but these days it supports overlay filesystems, so it's totally reasonable to set it up locally)16:38
tumbleweedSo, how come I'm talking about pbuilder when I told you to run "pbuilder-dist" ?16:38
tumbleweedWell, it turns out that pbuilder is very flexible, but doesn't come with all the features you'd want, out the box16:38
tumbleweedIt assumes that you are building everything for a single distribution and release (which makes some sense in Debian, but less so in Ubuntu)16:38
tumbleweedSo, we have a wrapper around pbuilder in ubuntu called pbuilder-dist16:38
tumbleweedAll it does is call pbuilder with a bunch of command line options (you can see that with a ps x)16:39
tumbleweedIt also puts the chroot tarbals and built files into a friendly ~/pbuilder/ rather than /var/cache/pbuilder/16:39
tumbleweedbefore pbuilder-dist, most people used to use complicated pbuilder configuratino files that did all of that for them16:39
tumbleweedfiguring out what release to build for, from environment variables16:39
tumbleweede.g. https://wiki.ubuntu.com/PbuilderHowto#Multiple_pbuilders16:40
tumbleweedpbuilder-dist makes it a lot quciker for you to get started16:40
tumbleweedRight, so, if you have a working pbuilder, you can test building something in it16:40
tumbleweedgrab a package that'll build quickly, here's one I can think of, beautifulsoup:16:41
tumbleweed$ pull-lp-source -d beautifulsoup16:41
tumbleweed$ pbuilder-dist precise beautifulsoup_3.2.0-2build1.dsc16:41
tumbleweedand it should build...16:42
ClassBotcoolbhavi asked: How to get pbuilder log files?16:42
tumbleweedpbuilder will store a log file next to the build output16:42
tumbleweedso, next to the debs, you should see a file called beautifulsoup_3.2.0-2build1_amd64.build16:43
tumbleweed(or i386, if you use i386)16:43
tumbleweedNext up: pbuilder maintainance16:44
tumbleweedit's not very useful to build in last week's development environment, Ubuntu development releases move fast16:44
tumbleweedyou always want to build with current packages16:44
tumbleweedso, every now and then (say, when you start working on something for the first time in the day, run pbuilder-dist update precise)16:45
tumbleweed(you may set up a cronjob for that if you do this a lot)16:45
ClassBotcoolbhavi asked: I heard about pbuilder and pdebuild whats the difference between them?16:45
tumbleweedright, pdebuild is like "debuild" for pbuilder16:46
tumbleweedyou can run it inside an extracted source package, and it'll build the source package, and pass it to pbuilder16:46
tumbleweedunfortunetly, we don't have a pdebuild for pbuilder-dist (there's a bug requesting one)16:46
tumbleweedso it's not very useful for pbuilder-dist users16:46
=== dholbach_ is now known as dholbach
tumbleweedOK, onwards!16:47
tumbleweedright, so you updated your pbuilder 3 hours ago, and it's already clearly out of date, because you are seeing 404 errors during the dependancy installation phase16:48
tumbleweedit'd make a lot more sense to make it update itself at the start of the build16:48
tumbleweedfortunately, pbuilder comes with a "hook script" feature16:48
tumbleweedyou can make it run programs at certain times16:48
tumbleweed(you can read all the gorey details in the pbuilder manpage)16:48
tumbleweedthere are a few nice example scripts in /usr/share/doc/pbuilder/examples/ that I want to bring to your attention16:48
tumbleweedhrm, I swear there used to be a D90update script there, but I don't see one16:50
ClassBotThere are 10 minutes remaining in the current session.16:50
tumbleweedanyway, I have my own, which just runs "/usr/bin/apt-get update"16:50
tumbleweedhandy for making sure the package lists are up to date before building16:50
tumbleweedthere are also examples (debc and lintian) for outputting useful information at the end of the build16:51
tumbleweeddebc shows you what's in the built packages16:51
tumbleweedlintian does some cursory checks on the packages16:51
tumbleweed(all of this ends up in your build log, and is very handy for debugging)16:51
tumbleweedthe dpkg-i script tries to install and remove the packages that were built16:52
tumbleweedthis can pick up problems in the maintainer scripts16:52
tumbleweed(you can also do this separately with piuparts)16:52
tumbleweedand by far the most useful one, C10shell16:52
tumbleweedthis is awesome16:52
tumbleweedwhen a build fails, it dumps you in a shell, inside the build chroot16:53
tumbleweedso you can play around, and figure out what went wrong and how to fix it16:53
tumbleweedI highly recommend enabling it16:53
tumbleweedhow do you use these? Well you create a directory in your home directory, traditionally ~/.pbuilder-hooks16:53
tumbleweedthen you put HOOKDIR=$HOME/.pbuilder-hooks in your .pbuilderrc16:54
ClassBotjincreator asked: You mentioned "pbuilder-dist update precise" but I think it is "pbuilder-dist precise update"...16:54
tumbleweedjincreator: that may be true, I'm rusty16:54
tumbleweedI know it does offer some leewaywith getting arguments in the wrong order16:54
ClassBotThere are 5 minutes remaining in the current session.16:55
tumbleweedanother pretty cool thing you can do with pbuilder is to build on a different architecture16:55
tumbleweedif instead of saying "precise" you say "precise-i386", it'll create an i386 chroot on your amd64 system. Handy16:55
tumbleweedyou can even build armel packages on i386/amd64, through emulation with qemu-user-static16:56
tumbleweedIt'll sometimes not work, but it mostly does16:56
tumbleweed(I'm talking about qemu there, sometimes it segfaults unexpectadly)16:56
tumbleweedfinal questions?16:57
tumbleweedSorry that was crazy fast, 30 min slots are short...16:57
tumbleweedThere are lots of people who know pbuilder, cowbuilder and sbuild backwards, who hang out in #ubuntu-motu, feel free to ask us questions any time16:58
ClassBotalucardni asked: how can I set pbuilder to build the package twice?16:59
tumbleweedYou just say --twice16:59
tumbleweedThat's really handy for finding packages that don't clean correctly16:59
tumbleweedthat is, their clean rule doesn't cleanup everything that the build created / modified16:59
tumbleweedOK, I'm done, thanks for listening17:00
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Writing Crisp Changelogs - Instructors: coolbhavi
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2012/02/02/%23ubuntu-classroom.html following the conclusion of the session.17:00
coolbhavithanks tumbleweed for the great session17:00
coolbhaviHi all I am Bhavani Shankar a 24 year old ubuntu developer from India17:00
coolbhaviI am going to take you through what is meant by a changelog in general and how to write effective changelogs in the ubuntu sphere17:00
coolbhaviBefore we start off please download a package (totem for instance) and when we navigate through the source tree we find files named ChangeLog, NEWS, et.al17:01
coolbhaviSo lets start :)17:01
coolbhavi== Meaning of a changelog ==17:01
coolbhaviA changelog is nothing but a log or record of changes made to a project or a software17:01
coolbhavi== The basic funda behind a Changelog ==17:02
coolbhaviNaming convention of a changelog file generally is a txt file with a name as ChangeLog17:02
coolbhaviSometimes its also called by CHANGES or HISTORY17:02
coolbhavi(It may be brought to notice that sometimes some packages/software have a file called NEWS is usually a different file reflecting changes between releases, not between the commits)17:02
coolbhaviSome Version control systems are able to generate the relevant information that is suited as a changelog.17:03
coolbhavi== General Format of a changelog file ==17:03
coolbhaviMost changelog files follow the following format17:03
coolbhaviYYYY-MM-DD  Joe Hacker  <joe@hacker.com>17:03
coolbhavi    * myfile.ext (myfunction): my changes made17:03
coolbhavi    additional changes17:03
coolbhavi    * myfile.ext (unrelated_change): my changes made17:03
coolbhavi    to myfile.ext but completely unrelated to the above17:03
coolbhavi    * anotherfile.ext (somefunction): more changes17:03
coolbhavi(These files are generally organised by paragraphs defining a unique change wrt a function or a file)17:04
coolbhaviMore on changelogs and changelog formats here: http://www.gnu.org/prep/standards/html_node/Change-Logs.html17:04
coolbhaviok now moving on,17:05
coolbhavi== Ubuntu and Changelogs ==17:05
coolbhaviThe changelog file pertaining to a Ubuntu package is stored in the debian directory under the name changelog according to debian policy17:05
coolbhaviDebian policy defines its changelog to be in this format:17:05
coolbhavipackage (version) distribution(s); urgency=urgency17:05
coolbhavi         [optional blank line(s), stripped]17:05
coolbhavi       * change details17:05
coolbhavi         more change details17:05
coolbhavi         [blank line(s), included in output of dpkg-parsechangelog]17:05
coolbhavi       * even more change details17:06
coolbhavi         [optional blank line(s), stripped]17:06
coolbhavi      -- maintainer name <email address>[two spaces]  date17:06
coolbhaviIn particular, The date has the following format:17:06
coolbhavi     day-of-week, dd month yyyy hh:mm:ss +zzzz17:06
coolbhaviwhich is got by running the date -R command in a terminal17:07
coolbhaviwhere:17:07
coolbhavi    day-of week is one of: Mon, Tue, Wed, Thu, Fri, Sat, Sun17:07
coolbhavi    dd is a one- or two-digit day of the month (01-31)17:07
coolbhavi    month is one of: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec17:07
coolbhavi    yyyy is the four-digit year (e.g. 2012)17:07
coolbhavi    hh is the two-digit hour (00-23)17:07
coolbhavi    mm is the two-digit minutes (00-59)17:07
coolbhavi    ss is the two-digit seconds (00-60)17:07
coolbhavi    +zzzz or -zzzz is the the time zone offset from Coordinated Universal Time (UTC). "+" indicates that the time is ahead of (i.e., east of) UTC and "-" indicates that the time is behind (i.e., west of) UTC. The first two digits indicate the hour difference from UTC and the last two digits indicate the number of additional minutes difference from UTC. The last two digits must be in the range 00-59.17:07
coolbhaviIt can be worth mentioning here that the entire changelog must be coded in UTF-8 (normally taken care by dch command)17:08
coolbhavifor more info on the dch command please see man dch17:09
coolbhaviMore explanation on the fields of the changelog file here: http://www.debian.org/doc/debian-policy/ch-source.html#s-dpkgchangelog17:10
coolbhaviNow moving on further17:10
coolbhavi== Do's and Donts ==17:10
coolbhavi<kanliot> QUESTION:  When are changelogs used, and who is responsible for putting them in.  also, where are they placed?17:11
coolbhavikanliot, changelogs are used as a log for tracking changes in projects or software usually the project maintainers write the changelogs its usually placed in the source tree under the name ChangeLog with a txt extension normally and in debian/ubuntu the package chanelogs are placed in debian/changelog17:14
coolbhaviso moving on with do's and donts17:14
coolbhaviThe purpose of writing a changelog generally is to make sure you document all the changes and history in a most readable n understandable manner :)17:15
coolbhaviBelow are few points to effective changelog writing17:15
coolbhaviFewer Assumptions: Try to make lesser assumptions about a particular user knowing something about a particular package so it ll help bringing out better detail and understandability17:15
coolbhaviStart with the easiest part first and push the more complex/more technical part at the end to make it a interesting read17:16
coolbhaviGrouping: Group the common stuff and related changes under a heading called summary to make it easier to understand17:16
coolbhaviWhitespaces: Give appropriate whitespaces to make a clean looking formatted changelog17:16
coolbhaviSummarising: Adding a one line summary of the change at the top makes the reader to get a overview of what the change is meant to be17:17
coolbhaviClosing the bugs via changelog while submitting a patch to a bug for sponsor review17:17
coolbhavilast but not the least, spellchecks!17:17
coolbhaviThe following link gives few examples of debian/changelog writing http://pastebin.com/kQHazZ8y17:18
coolbhaviPlease Remember that changelog writing becomes easy by practice!17:19
coolbhaviSorry for hurrying the session up due to 30 min time slot17:19
ClassBotThere are 10 minutes remaining in the current session.17:20
coolbhaviPlease feel free to ask any questions on the same17:20
=== Partyschaum is now known as Partyschaum^away
coolbhavi<kanliot> QUESTION ARE you going to go into the actual command to generate the changelogs?17:24
ClassBotThere are 5 minutes remaining in the current session.17:25
coolbhaviafter you type the changelog  debuild will use dpkg-parsechangelog and dpkg-genchanges to generate a changes file17:26
coolbhaviQUESTION: are the * - and + in that example file just arbitrary bullet points or do they have a special meaning in changelogs?17:26
coolbhavithe bullet points are used for distinguishing between the main summary of changes and a detailed description for formatting17:27
coolbhavi<jincreator> QUESTION: Sometimes my changelog sentence become too log for 1 line. What is the best way to solve it?17:28
coolbhaviwrap up the line to be around 80 charecters17:28
coolbhavi<jsjgruber-lernid> QUESTION: ​ Should you create changelogs before or after you merge changes into a repo?17:28
=== koolhead17 is now known as koolhead17|zzZZ
coolbhaviafter doing the changes before merging the same its always preferable to document changes17:29
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Getting started with contributing to Ubuntu Documentation - Instructors: jbicha
coolbhaviThanks all of you for turning up :) Please feel free to hang out at #ubuntu-motu or #ubuntu-devel for any questions.17:30
coolbhaviYou can also catch me up on bhavi@ubuntu.com or facebook.com/bshankar17:30
coolbhaviThanks all again!17:30
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2012/02/02/%23ubuntu-classroom.html following the conclusion of the session.17:30
jbichaHi, I'm Jeremy Bicha and I'm a volunteer member of Ubuntu's Documentation and Desktop teams.17:32
jbichaI joined the Documentation Team a year ago as Ubuntu badly needed help with integrating the new GNOME User Guide17:32
jbichawith Ubuntu documentation where we obviously use Unity by default instead of GNOME Shell.17:32
jbichaToday, I'd like to show you how you can get started with contributing to Ubuntu's documentation.17:33
jbichaI really like that you don't need to really be a coder to write good documentation; you just need good English writing skills and attention to detail.17:34
jbichaIf you visit our team's wiki page, you can see that there are several different areas we work on.17:34
jbichahttps://wiki.ubuntu.com/DocumentationTeam17:34
jbichaThere is the help wiki which anyone can edit and all you need is a Ubuntu One/Launchpad account.17:34
jbichahttps://help.ubuntu.com/community17:34
jbichaOne thing that's confused me in the past about Ubuntu's wiki is that there are actually two of them!17:35
jbichahelp.ubuntu.com is a reference for Ubuntu-related "how-to's, tips, tricks, and hacks" whereas wiki.ubuntu.com is a resource for contributing to Ubuntu so it has pages for all the different Ubuntu teams you can join.17:35
jbichaSo if you want to contribute help guides, you can do that at help.ubuntu.com/community.17:35
jbichaSecondly, the Ubuntu Docs Team is responsible for the help that's shipped inside Ubuntu and the other Ubuntu flavors (Kubuntu, Xubuntu, etc.)17:35
jbichaYou can see this system help if you type help into the dash in Unity.17:36
jbichaThis help is also mirrored to https://help.ubuntu.com/11.10/ubuntu-help/17:36
jbichaThere's several different ways you can help out with the system documentation.17:36
jbichaYou can read the help and file bugs if you see typos.17:36
jbichahttps://bugs.launchpad.net/ubuntu/+source/ubuntu-docs/17:37
jbichaSince this is Developer Week, I'd also like to show you can submit fixes in the same format we use.17:37
jbichaRun this command in Terminal:17:37
jbichabzr branch lp:ubuntu-docs17:37
jbichaIt may take a while depending on how fast your internet connection is, but that copies the source code from the Launchpad servers.17:37
=== fenris is now known as Guest57960
jbichaYou can then use gedit or your favorite text editor to open up one of the pages.17:38
jbichaOpen up ubuntu-docs/ubuntu-help/help/C/unity-introduction.page for instance.17:38
jbichaThe first 20 lines or so are special information that sets the page title, keeps track of the page authors and the last time it was formally reviewed and other similar information.17:39
jbichaThen you have the actual content. Each paragraph must start with <p> and end with </p>.17:39
=== ubuntu is now known as kirkland-ec2
jbichaThe Ubuntu Desktop Guide is written in Mallard (older docs or non-GNOME stuff use a similar but slightly more complex format named Docboook). More information about the format and a 10-minute introduction can be found at http://projectmallard.org/17:40
=== alek is now known as tomal
jbichaThe Mallard format is pretty cool as it is designed to be topic-based, as opposed to older computer help which read more like a manual or a book with chapters17:41
jbichaWe're trying to convert more and more GNOME apps to use it because it is more useful as I believe most people want to read an answer to their problem or a how-to for a specific task instead of trying to page through a longer document with chapters17:43
jbichaWe'd love it if other projects like KDE switched to the format too but that hasn't really happened yet17:44
jbichaAnyway, you probably also want to bookmark http://blogs.gnome.org/shaunm/files/2012/01/mallardcheatsheet.png or https://gitorious.org/projectmallard/mallard-cheat-sheets/trees/master17:44
jbichathat lets you see all the additional features you can add to your Mallard help files in one easy location17:45
jbichaAfter you've made your changes (fixed a typo or added some extra information for instance), navigate in your terminal to the ubuntu-docs folder and run17:46
jbichabzr commit17:46
=== Guest57960 is now known as ejat
jbichaThis will open up nano (by default) where you should type in a description of what changes you've made. Then hit Ctrl+O to save and Ctrl+X to exit the editor.17:47
jbichaThen you can run bzr push lp:~/ubuntu-docs/my-changes You'll want to definitely use something more descriptive than "my-changes" to describe what you've done.17:47
jbichaThen open https://code.launchpad.net/~ in your web browser17:48
jbichaClick the name of the branch you just pushed to17:48
jbichaAnd then click the Propose for Merging button17:48
jbichathe target branch should say lp:ubuntu-docs17:49
jbichayou can add a description if you like, but you should probably leave the reviewer field blank, then click Propose Merge17:49
ClassBotThere are 10 minutes remaining in the current session.17:50
jbichaIf you have any questions, you can ask them now17:50
jbichaAlso, you can visit #ubuntu-docs or ask on our mailing list https://lists.ubuntu.com/mailman/listinfo/ubuntu-doc17:51
jbichathe Ubuntu Documentation team and GNOME Docs team definitely could use your help17:55
ClassBotThere are 5 minutes remaining in the current session.17:55
jbichathe Ubuntu Docs team is all-volunteer and we're always looking for more contributors17:56
ClassBotjincreator asked: Can Mallard import ubuntu docs to pdf?17:57
jbichayes, you can but I'm going to have to get back with you about how that works17:58
jbicha(since we're nearly out of time)17:58
jbichabut Mallard already has exporters for html, xhtml, epub, and I believe pdf17:58
jbichathanks for your time!17:59
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Automated packaging with pkgme - Instructors: james_w
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2012/02/02/%23ubuntu-classroom.html following the conclusion of the session.18:00
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Syncing your app data everywhere with U1DB - Instructors: aquarius
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2012/02/02/%23ubuntu-classroom.html following the conclusion of the session.18:03
aquariusHi, everyone!18:03
aquariusI'm Stuart Langridge, and I work on Ubuntu One18:03
aquariusNow I'm here to talk about adding Ubuntu One to your applications.18:04
aquariusDo please ask questions throughout the talk: in the #ubuntu-classroom-chat channel, write QUESTION: here is my question18:04
aquariusWe want to make it possible, and easy, for you to add the cloud to your apps and to make new apps for the cloud18:04
aquariusSo we do all the heavy lifting, and your users (and you!) get the benefits.18:04
aquariusSo, you've built an app which does things for you: let's say it's a todo list app, since lots of people are doing that, with Getting Things Done or something.18:04
aquariusIt'd be great to have your todo list on all your Ubuntu machines -- your desktop machine, your netbook, and so on.18:04
aquariusTo do that, just sync the folder that you store the todo lists in with Ubuntu One.18:04
aquariusI'm going to talk about U1DB shortly, our in-progress effort to enable structured data sync, but you can also work with files quite happily.18:05
aquariusWorking with Ubuntu One file sync programmatically is done through the Python library ubuntuone.platform.tools.SyncDaemonTool.18:05
aquarius(If you're not using Python, then don't worry; SyncDaemonTool is only a wrapper around the Ubuntu One D-Bus API, so all this works from other languages too. I'll explain the Python version here, though, for simplicity.)18:05
aquariusSo: "pydoc ubuntuone.platform.tools.SyncDaemonTool" to see the documentation.18:06
aquarius(Note: you'll need to be running precise for this, either right now or after it's released.)18:06
aquariusImagine, in your todo list app, you have a checkbox for "put my todo lists on all my machines", and you store your todo lists in ~/.local/share/mytodolist/lists.18:06
aquariusSo ticking the checkbox should mark that folder as synced with Ubuntu One, and then it'll be synced everywhere.18:06
aquariusA simple example of how to do that is at http://paste.ubuntu.com/825171/18:07
aquariusAs you can see, we check whether the folder is *already* on your list of synced folders, and if not, we use create_folder to create it.18:07
aquariusEverything that file sync can do, you can do with SyncDaemonTool or the underlying D-Bus API.18:08
aquariusThe Ubuntu One control panel, and the technical u1sdtool, both just talk to that D-Bus API.18:08
aquariusSo if you port your todo list app to Windows, or the web, or iOS or Android or Blackberry or all of them, they can all still get at the data.18:08
aquariusFile sync is about more than just the-same-files-on-all-my-machines, though.18:09
aquariusYou can use it for communication and distribution as well.18:09
aquariusTo pick an example, jonobacon and dholbach and I and others have recently been working on an Ubuntu Accomplishments system (http://www.jonobacon.org/2012/01/29/more-ubuntu-accomplishments-hacking/).18:09
aquariusMost of this is all local stuff, which can be used to help people learn the Ubuntu desktop -- you send an email, you set your desktop background, and that's an accomplishment18:10
aquariusor as a reward -- you complete a level in a game, for example18:10
aquariusbut there are also accomplishments which are to do with your activities on the wider internet18:10
aquariusSo, you filed your first bug about Ubuntu, for example.18:10
aquariusNow, these need to be "verified" by another machine, something that isn't your computer, to prove you did it; that other machine checks with Launchpad that you've actually filed a bug and then says "yep, they did it".18:11
aquariusOne way to implement this would be to run a web service -- you can make requests to it saying "I filed a bug: verify that, please"18:11
aquariusand the web service goes away and checks that you did and then says "yes, you did, and here's a token to prove it"18:11
aquariusBut that's got all sorts of problems -- you have to be online to talk to the web; if the web service gets popular it might crash a lot (think of Twitter, here), and so on18:12
aquariusWhat you want is to work *asynchronously*.18:12
aquariusSo, instead of directly contacting a web service, put the stuff you want to check in a folder, sync that folder with Ubuntu One, and then *share* that folder with a specific U1 user account18:12
aquariusThat U1 user account is owned by a machine, and when your network comes back, your files will sync to U1, then they'll sync across to the machine's account18:12
aquariusThe machine can then look at those files, verify them at its leisure, and then add the "yes they did it" token, and then that token will sync back to your machine18:12
aquariusSo, you're working just like with a web service, but it *doesn't have to be real time*18:13
aquariusWhich means that you don't need to worry about having super hardware running the web service, really complicated load-balancing; you don't have to worry about the user being offline and queueing up requests; none of that18:13
aquariusAnd this is all built in to Ubuntu. Anyone can have an Ubuntu One account.18:13
aquariusSo you can happily use this in your Ubuntu apps.18:14
aquariusSo, for example, imagine being able to instantly, one-click-ly, publish a file from your application to a public URL and then tweet that URL.18:14
aquariusInstant get-this-out-there-ness from your apps.18:14
aquariusThe screenshot tool Shutter, for example, can do this already; PrtSc to take a screenshot, then "Export > Ubuntu One".18:15
aquariusYour app could have a button to "store all my files in the cloud", or "publish all my files when I save them", or "automatically share files that are part of Project X with my boss".18:15
aquariusSo a backup program, for example, could back up your files straight into Ubuntu One and not sync them to your local machines, and that's exactly what the excellent Deja Dup does18:15
aquariusUbuntu's default backup system will back up your stuff straight to Ubuntu One, so you've got a safe offsite backup when you need it18:17
aquariusThat was entirely built on the Ubuntu One APIs.18:17
aquariusThe interesting thing here, of course, is that if you build your own web service to go alongside the app you're building, then you have to run that web service, keep it going, pay the bills for it, be a sysadmin.18:17
aquariusBut if your app uses Ubuntu One, then it's using the user's *own storage*, not yours.18:17
aquariusSo you get all the benefits of your app having a web service, and none of the downsides!18:17
aquariusAnd of course being able to save things in and out of the cloud means that you can get an Ubuntu One sync solution on other platforms.18:17
aquariusSo you could work with your files from your mobile phone (we've already got Android and iOS clients for phones, but there are plenty of people with N9s or Windows Phone or Blackberry)18:18
aquariusBuild a fuse or gvfs backend for Ubuntu or Fedora or SuSE or Arch Linux. Build a WebDAV server which works with Ubuntu One and mount your Ubuntu One storage as a remote folder on your Mac.18:18
aquariusAnd web apps can work with your cloud too, for files as well as data.18:18
aquariusImagine, say, a torrent client, running on the web, which can download something like a movie or music from legittorrents.info and save it directly into your cloud storage.18:18
aquariusSo you see an album you want on that torrent site (say, Ghosts I by Nine Inch Nails) and go tell this web torrent client about it (and you've signed in to that web torrent client with Ubuntu One)18:18
aquariusAnd the website then downloads that NIN album directly into your personal cloud -- which of course makes it available for streaming direct to your phone.18:18
aquariusBut it's not just about your content for yourself; think about sharing.18:19
aquariusUbuntu One lets you share a folder with people. This would be great for distribution.18:19
aquariusImagine that you publish an online magazine.18:19
ClassBotThere are 10 minutes remaining in the current session.18:20
aquariusSo, you create a folder on your desktop, and put issues of the magazine in it.18:20
aquariusThen, you put a button on your website saying "Sign in with Ubuntu One to get our magazine".18:20
aquariusWhen someone signs in, your website connects to the Ubuntu One files API, with your private OAuth token, and adds that signed-in user to the list of people that your magazine folder is shared with.18:20
aquariusThen, whenever your magazine has a new issue, you just drop it into that folder on your desktop.18:21
aquarius(Or even upload it to Ubuntu One directly through the website.)18:21
aquariusAll the subscribed people will get the new issue instantly, on all the machines they want it on, and in the cloud.18:21
aquariusYou could distribute anything like this. Imagine a podcast, or chapters of a novel.18:21
aquarius(I keep imagining an online game which grows over time, but that's just me)18:22
aquariusIt would also work for paid-for content; when someone pays, have your code share a folder with them, and put their paid-for stuff in that folder. That's all doable through the files API.18:22
aquariusWe have the start on documentation for all the APIs at https://one.ubuntu.com/developer and we're working hard on updating that at the moment18:22
aquarius(we've been moving the documentation to use the Sphinx docs system under the covers, so some of the more recent things aren't yet documented, and I'm working on that)18:22
aquariusThat about covers things for this talk; it's a quick tour through some of the things that Ubuntu One can do for your apps18:23
aquariusThere's, of course, another thing that you can do; bring U1 to new platforms18:23
aquariusWe've recently had people start building wrapper libraries for Ubuntu One files in loads of different environments... the most recent was .net18:24
aquariusso that the chap can also build apps on windows which work with his files in Ubuntu One18:24
aquariusOK, that's the brief summary.18:24
aquariusIf anyone has questions about this or about anything to do with Ubuntu One and app development, I'm happy to answer them18:25
ClassBotThere are 5 minutes remaining in the current session.18:25
aquariusand I'm also talking about U1DB, our in-progress data sync thing, in an hour, so you may find that interesting too :)18:25
aquariusmelvster says: QUESTION: this sounds absolutely awesome, you've alluded to the fact there will be a standards compliant REST API with global URLs exposed, 1. will it expose correct and flexible MIME types, 2. cross origin headers for interop with apps,  3. will there be fine grained access control18:26
aquarius1. yes, there already is a REST API for your files in the cloud -- see https://one.ubuntu.com/developer/files/store_files/cloud/18:26
=== cmagina_ is now known as cmagina-lunch
aquarius1b. mime types for your files are what you set them to be, if you upload them through the APIs18:27
aquarius2. CORS headers are an interesting one. I'd like to hear reasoning both for and against that. I've been thinking about it, and I'm leaning towards it being a good idea, but it's not done yet.18:27
aquarius3. fine grained access control -- granting an access token which can access only one folder, or one file, or have read but not write access to your files -- is something that we plan to build, but we haven't yet.18:28
ClassBotburli asked: whats the status of u1db?18:29
aquariusYou want to be here in an hour to see the u1db talk for that :)18:29
aquariusbriefly, though, it's in progress, and you can start using it now in apps, and we'd love to hear from you about it :)18:29
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Pair Programming and Code Review in the Cloud! - Instructors: kirkland
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2012/02/02/%23ubuntu-classroom.html following the conclusion of the session.18:30
kirklandwelcome all!18:31
kirklandokay, this will be a totally live/interactive session18:31
kirklandplease ssh guest@classroom.gazzang.net18:31
kirklandpassword is 'guest'18:31
kirklandyou'll have read only access there18:31
kirklandwhere I'm going to demo some neat practices for pair programming and code review in the cloud!18:31
kirklandfor the best experience, you may want to maximize your window18:32
kirklandor expand it to at least 180x45 characters18:32
kirklandyou may want to use ctrl - to decrease font size (in gnome-terminal anyway)18:32
kirklandthere's a clicker at the bottom, counting the number people in the session18:32
kirklandi see "14#" at the bottom18:32
kirklandI've used byobu many, many times for these sessions18:33
kirklandbut this is the *first* time I've used byobu + tmux ;-)18:33
kirklandwe'll see how it goes!18:33
kirklandokay, now that we've got a good count of people in here, let's get started18:33
kirklandin that shared screen session, I'm running IRSSI, a command line irc client18:34
kirklandyou can stay connected there (here?) and see what I'm typing18:34
kirklandno need to go back and forth between the terminal session and your chat client18:34
kirklandthese are a handful of best practices me and my colleagues around Canonical, Ubuntu, and Gazzang have used over the last few years18:34
kirklandthat have really made working with people around the world a lot easier18:34
kirklandchief among these (for me) has been shared GNU screen and now Tmux sessions, in EC218:34
kirklandwe're able to avoid firewalls and networking/routing issues by "meeting in the middle"18:35
kirklandone or more of us can easily ssh into an EC2 machine18:35
kirklandand these instances can cost as little as $0.02/hour18:35
kirklandnow, this one, is a big one ;-)18:35
kirkland32 cpus and 60GB of memory18:35
kirklandfor a "whopping" $2.40/hour :-)18:35
kirklandanyway, this system is running Ubuntu 11.10, plus an updated version of byobu and tmux from ppa:byobu/ppa18:36
kirklandyou all who are logged in as the 'guest' user18:36
kirklandare attached to a readonly GNU screen session18:36
kirklandwhich is wrapped around a tmux session18:36
kirklandwhich is being driven by my 'ubuntu' user18:36
kirklandfor which I'm the only person with access18:37
kirklandthat's just for display here18:37
kirklandbut if you want to see how to set that up, see the Juju charm 'byobu-classroom'18:37
kirklandin most cases, when I'm doing this with my trusted colleagues18:37
kirklandwe just share the same ubuntu account18:37
kirklandand both of us have read/write access18:37
kirklandI'm sure you can appreciate all the things that might go wrong if I gave 27 of you simultaneous read/write access ;-)18:38
kirklandmayhem :-D18:38
kirklandokay, so let's first feel our way around this session18:38
kirklandfirst, I'll press shift-F1 to display the help/keybindings18:38
kirklandhere, i can see that byobu binds a bunch of actions to the F keys18:38
kirklandI'll quickly work my way through a couple of them18:39
kirklandF2 creates new windows, and F3/F4 will move right and left between them18:39
kirklandyou won't be able to do that here in our shared session18:39
kirklandbut you can do that on your local ubuntu computer by running 'byobu-tmux' on your command line18:39
kirklandso now i hit F2 3 times18:39
kirklandand have windows 0, 1, 2, 318:39
kirklandand i can press F3 and F4 to move right and left among them18:40
kirklandi'm going to run the 'top' command in window 318:40
kirklandand now i'm going to rename window 3 to say "top" by pressing F818:40
kirklandand i'll rename window 0 to "irc" with F8 as well18:40
kirklandokay, so windows are one way of multi tasking18:41
kirklandbut spliting the screen is far more interesting!18:41
kirklandctrl-F2 will split the screen vertically18:41
kirklandand shift-F2 will split the screen horizontall18:41
kirklandand I can keep doing that pretty much ad nauseum!18:41
kirklandnote that splits are per-window18:41
kirklandso if I go over to window 318:41
kirklandi won't see any splits there, until I create them18:42
kirklandso much space over on the left of window 318:42
kirklandi'll create another split there :-)18:42
kirklandmoving between windows is F3/F418:42
kirklandmoving between splits is Shift-Up/Down/Left/Right18:42
kirklandand you should see the split highlighted in purple18:43
kirklandthat's your active split18:43
kirklandas well as some numbers that pop up and identify them18:43
kirklandyou can jump directly to a number split if you want18:43
kirklandso let's start doing some work in one of these splits18:43
kirklandi have downloaded the source code of libreoffice18:43
kirklandas well as its build dependencies18:43
kirklandlet's see it build on a 32 processor system :-)18:43
kirklandand we'll pretend that we're pair programmers working on some big build18:44
kirklandi really like colorized logs18:44
kirklandso I'm going to pipe the output of debuild through ccze18:44
kirklandand that'll take a while :-)18:44
kirklandlets say that I want to break that split out to a window of its own18:45
kirklandas I really don't need to see that build right now18:45
kirklandpressing Shift-F1, I'll get the menu again18:45
kirklandand I can see that Alt-F11 will expand a split to a full window18:45
kirklandso now we have the libreoffice build happening in window 418:46
kirklandnow, let's look at some source code18:46
kirklandi'm going to install a web application18:46
kirklandwe're going to debug a problem18:46
kirklandtail some logs18:46
kirklandand debug it in real time18:46
kirklandI'm going to install pictor18:47
kirklanda web application for browsing pictures over a web interface18:47
kirklandsomething like picasa, I suppose18:47
kirklandyou can point a browser at http://classroom.gazzang.net/pictor18:47
kirklandand you'll see that we need to seed it with some images18:47
kirklandi'm going to grab some packages18:48
kirklandfrom ubuntu that serve wall papers18:48
kirklandnow let's install some symlinks18:48
kirklandto our pictures18:48
kirklandand pretend that's what we want pictor to serve18:49
kirklandnow let's tail our apache logs18:49
kirklandin another split18:49
kirklandI can see a few of you browsing that site now :-)18:50
kirklandlet's tail the error log now18:50
kirklandI'm going to resize my splits now18:50
kirklandusing Ctrl-Up/Down/Left/Right18:50
kirklandbusy busy busy :-)18:51
kirklandnow18:51
kirklandperhaps you've noticed our bug18:51
kirklandhttp://classroom.gazzang.net/pictor/?album=%2Fbackdrops&thumbs=118:51
kirklandthe "backdrops" album is empty18:51
kirklandI wonder why ....18:51
kirklandhmm, so the files in the backdrops directory are png's18:52
kirklandmeanwhile, the "working" ones are .jpgs18:52
kirklandlet's hack it into the code, then18:53
kirklandthis is the point at which18:53
kirklandyou and your team18:53
kirklandperhaps pair programming18:53
kirklandmight dig through the code and find the bug18:53
kirklandi'm going to search this code for hardcoded "jpg" references18:54
kirklandaha!18:54
kirklandthere's an is_image() function18:54
kirklandthat looks for files ending in "jpg" and "jpeg"18:54
kirklandlet's try adding ".png"18:54
kirklandnow refresh18:54
kirklandlovely!18:54
kirklandof course, I just made that change directly on the /usr/share source code18:54
kirklandif we wanted to do this right, we should branch bzr and submit the change18:54
kirklandlet's do that very quickly18:54
kirklandthere's our 1-line change18:55
kirklandin our bzr cdiff18:55
kirklandand there we have it!18:56
kirklandI'll make sure to credit all of #ubuntu-classroom when I commit this fix later today ;-)18:56
kirklandlet's go back and check our office build, out of curiosity18:56
kirklandstill chugging along18:57
kirklandare you getting a feel for how this works?18:57
kirklandwe use it often for education (like this!)18:57
kirklandwhere one person is trying to teach one or more how to do something18:57
kirklandbut it's also phenomenally useful for debugging complex problems18:58
kirklandjohnny-e> QUESTION: is your byobu is using tmux instead of screen?18:58
kirklandjohnny-e: well, it's a bit of both18:58
kirklandwhat you're SEEING is byobu + tmux18:58
kirklandthe one line across the bottom18:58
kirklandand the elegant splits18:58
kirklandyes, that's tmux18:58
kirklandbut the thing that's keep all of you with readonly access is a wrapper of GNU screen18:59
kirklandthough that's entirely transparent to you18:59
kirkland<ssweeny-lernid> QUESTION: ​ so the double layer of tmux + screen is only because of the need for read-only in this session?18:59
kirklandssweeny-lernid: yes, exactly18:59
kirklandssweeny-lernid: when you do this with your friends/colleagues, it'll be trivial to setup18:59
kirkland(this configuration took me a few minutes)18:59
kirklandhere's what you'll do ...18:59
kirklandget an Ubuntu system running somewhere18:59
kirklandthe "cloud" is nice, because it removes the need for VPNs or fancy routing19:00
kirklandbut you could certainly use a physical local system or a VM19:00
kirklandnext, you could very conveniently use the ssh-import-id command19:00
kirklandthis is also a very useful tool to have in your toolbelt when doing pair programming and code review in the cloud19:00
kirklandyou can 'ssh-import-id SOME_LAUNCHPAD_USERNAME'19:01
kirklandand it will securely (over https) connect to Launchpad19:01
kirklandand retrieve that user's public SSH keys and insert them into the local authorized_keys file19:01
kirklandin this way, you can avoid needing to share passwords19:01
kirkland i would have done that today for this session19:01
kirklandbut I'm not sure how long it would have taken to import all 29 of you ;-)19:02
kirklandactually, just before we sign off, I'll import your keys19:02
kirklandand let you trash this system for a few seconds before I terminate it :-P19:02
kirkland<jsnapp> QUESTION: do you have any problems nesting byobu? like running byobu on my desktop and on my server?19:03
kirklandwell, yeah, kinda sorta19:03
kirklandnesting byobu can get complex19:03
kirklandwhen doing so, you'll need to know the tmux and/or screen key bindings19:03
kirklandand I'd recommend using two different escape sequences19:03
kirklandi use ctrl-a for mour outter session19:03
kirklandand ctrl-b for my inner session19:03
kirklandotherwise, byobu doesn't know which session you're talking to :-)19:04
kirkland<sinisterstuf> QUESTION: I was reading the gnu screen man pages, do you need to set up screen in a specific way to do this? I read something about giving the program root permission or something...19:04
kirklandsinisterstuf: yeah, here's the magic ...19:04
kirklandsinisterstuf: follow me over in the shared session19:04
kirklandyou can grab the bzr branch from http://bazaar.launchpad.net/~charmers/charms/oneiric/byobu-classroom/trunk/19:04
kirklandsee hooks/install19:05
kirkland[ -f /usr/share/byobu/profiles/classroom ] || echo "19:05
kirklandaclumask guest+r guest-w guest-x19:05
kirklandaclchg guest +r-w-x '#?'19:05
kirklandaclchg guest +x 'detach'19:05
kirklandmultiuser on19:05
kirklandescape "^Bb"19:05
kirkland" > /usr/share/byobu/profiles/classroom19:05
kirklandchmod 644 /usr/share/byobu/profiles/classroom19:05
kirklandthat's most of it19:05
kirklandthat changes the acls of the guest user to read only19:05
kirklandalso, I tweaked the ssh config19:05
kirklandso that the *only* command that the guest user can run on ssh in is to attach to the byobu session19:06
kirklandecho "19:06
kirklandPasswordAuthentication yes19:06
kirklandAllowTcpForwarding no19:06
kirklandMatch User guest19:06
kirkland  ForceCommand exec screen -x ubuntu/byobu-classroom19:06
kirkland" >> /etc/ssh/sshd_config19:06
kirkland<jsnapp> QUESTION: so do you typically nest byobu or just run it in the server?19:06
kirklandjsnapp: I almost never nest byobu19:06
kirklandbut that's a good question19:06
kirklandaround what I find as best practices for this...19:06
kirklandso I run gnome-terminal (or terminator)19:06
kirklandat full screen19:06
kirklandI use multiple tabs19:06
kirklandbut each tab is an ssh session to another server19:07
kirklandin each tab, I run byobu19:07
kirklandwhich is nice because I can always attach and detach19:07
kirklandactually ...  that's a good exercise19:07
kirklandI invite you to detach from the shared session19:07
kirklandusing F619:07
kirklandand then reattach19:07
kirklandby ssh'ing back in19:07
kirklandssh guest@classroom.gazzang.net19:07
kirklandyou'll see that everything is *exactly* as you left it19:08
kirklandI've just done the same thing19:08
kirklanddetached19:08
kirklandand then reattached19:08
kirklandthis is your lifeline savior when you have a crappy uplink connection :-)19:08
kirklandit would stink to have this office build die19:08
kirklandjust because your ssh session had a hiccup19:08
kirklandnow19:09
kirklandeach time I need a new shell19:09
kirklandI can either create a new window (F2)19:09
kirklandor a new split (Ctrl-F2/Shift-F2)19:09
kirklandI tend to group similar shells with splits19:09
kirklandso if I'm working on libreoffice in one window19:09
kirklandi might have a handful of related splits19:09
kirklandmaybe one building19:09
kirklandmaybe one with code19:09
kirklandmaybe two with code, side by side19:09
kirklandone for testing, etc.19:10
kirklandone tailing log files19:10
kirklandmuch like what we're looking at in window 019:10
kirklandwith 2 logs19:10
kirklandand one code19:10
kirklandoh, let's rearrange the windows19:10
kirklandlet's say I want to move the access log left or right one split19:10
kirklandI use Ctrl-F3/F419:10
kirklandI can do that with any of the splits19:11
kirklandalso, there's a handful of predefined, useful arrange ments19:11
kirklandyou can Shift-F8 will toggle through them19:11
kirklandhere's equal vertical windows19:11
kirklandor equal horizontal windows19:12
kirklandhere's one big one across the top19:12
kirklandand a bunch of verticals across the bottom19:12
kirklandor (probably my favorite)19:12
kirklandone vertical (where I look at my source code)19:12
kirklandand 3 more, where I tail my logs19:12
kirklandI'm going to move my source code over to the left split with Ctrl-F319:12
kirklandah, that's nice19:13
kirklandI can save a particular split arrangement19:13
kirkland    Ctrl-Shift-F8               Save the current split-pane layout19:13
kirklandand then restore it later19:13
kirkland    Ctrl-F8                     Restore a split-pane layout19:13
kirklandthere's a menu of the predefined ones, and my saved one, 'favorite'19:14
kirklandoh, let's see tiled as well19:14
kirklandalso nice19:14
kirklandit's lovely that *all* of this is happening over ONE single ssh connection19:14
kirklandwe have over a dozen shells open19:14
kirklanddoing some very busy things19:14
kirklandbut just 1 ssh session to the server19:14
kirklandand it's all preserved across attaches and detaches19:15
kirkland<kermit666> QUESTION: ​ Is it possible to do something similar using "ssh -X" to share a desktop in readonly mode when you're working in an IDE?19:15
kirklandkermit666: not that I know of, sorry :-(19:15
kirkland<johnny-e> QUESTION: so you're runing byobu on each server you connect to19:15
kirklandyes, always19:15
kirklandjohnny-e: you can set that easily on a per-user basis with 'byobu-enable'19:15
kirklandjohnny-e: or, you can set that on a system wide basis with 'dpkg-reconfigure byobu'19:16
kirklandHOWEVER19:16
kirklandthe best way to do it, I believe19:16
kirklandis by adding a one-liner to your LOCAL ~/.bashrc file19:16
kirklandexport LC_TERMTYPE=byobu19:16
kirklandput that in your local ~/.bashrc19:16
kirklandand any time you ssh to a system with a (recent) version of byobu19:17
kirklandthis script, /etc/profile.d/Z97-byobu.sh19:17
kirklandwill see that you've selected your TERMTYPE to byobu and it will try to launch it by default at startup!19:17
kirkland<caotic> QUESTION: what if i had an extra view which i would like to toggle on or off ?19:17
kirklandcaotic: I don't understand your question, can you clarify please?19:17
kirkland<jsnapp> QUESTION: how are you keeping other users screen size from affecting your byobu session? is it the read only access?19:18
kirklandjsnapp: oh, that's a great question19:18
kirklanda *very* hard one as well19:18
kirklandjsnapp: I have overriden the default byobu setting19:18
kirklandjsnapp: normally, byobu sets the tmux option aggressive-resize 'on'19:19
kirklandjsnapp: however, what that means is that everyone is limited by the smallest attached screen19:19
kirklandjsnapp: with 29 of you, one of you could have set your screen to 80x25 and limited all of us19:19
kirklandjsnapp: in some case (most?) that might be the right answer19:19
kirklandjsnapp: but for this demo, it wasn't, sorry19:19
kirklandjsnapp: so I set that to 'off' for this session19:19
kirkland<johnny-e> QUESTION: can you assign names to your custom split-pane layouts?19:19
kirklandjohnny-e: yes, absolutely, just press ctrl-shift-F819:20
kirklandjohnny-e: and it'll prompt you to name it19:20
ClassBotThere are 10 minutes remaining in the current session.19:20
kirklandjohnny-e: in your ~/.byobu directory, you'll see a layouts dir19:20
kirklandjohnny-e: I named my "favorite"19:20
kirklandjohnny-e: and the contents of that file is a tmux split window layout:19:20
kirklandb57b,180x44,0,0{80x44,0,0,99x44,81,0[99x14,81,0,99x14,81,15,99x14,81,30]}19:20
kirkland(have fun interpreting that ;-)19:21
kirklandjohnny-e: sorry, I did it earlier;  I encourage you to try it on your own byobu system later19:21
kirklandoh, one more important topic!19:21
kirklandnow, tmux and screen differ here significantly on a few major points19:22
kirklandi want to cover one of them here19:22
kirklandin tmux, all users will be connected to the same exact session by default19:22
kirklandand all users will see the exact same thing19:22
kirklandwhich is very much what "pair programming" is all about19:22
kirklandbut sometimes, you might want to split off from your colleague19:22
kirklandand work on something else19:22
kirklandon a different view19:22
kirklandhere, you would create a new "session"19:23
kirklandwhich you can do using ctrl-shift-F219:23
kirklandso to review:19:23
kirkland  F2                            Create a new window19:23
kirkland    Shift-F2                    Create a horizontal split19:23
kirkland    Ctrl-F2                     Create a vertical split19:23
kirkland    Ctrl-Shift-F2               Create a new session19:23
kirklandand then to move between sessions19:23
kirkland    Alt-Up/Down                 Move focus among sessions19:23
kirklandunfortunately, I won't be able to demo that here19:24
kirklandas your screen is attached to my tmux session19:24
kirklandand you won't follow me to the other one19:24
kirklandbut try it yourself!  it works19:24
kirklandI think we covered all of these, but to review:19:24
kirkland    Shift-F1                    Display this help19:24
kirklandand creating new things ...19:24
kirkland  F2                            Create a new window19:25
kirkland    Shift-F2                    Create a horizontal split19:25
kirkland    Ctrl-F2                     Create a vertical split19:25
kirkland    Ctrl-Shift-F2               Create a new session19:25
kirklandall movement is under F3 and F419:25
ClassBotThere are 5 minutes remaining in the current session.19:25
kirkland  F3/F4                         Move focus among windows19:25
kirkland    Shift-F3/F4                 Move focus among splits19:25
kirkland    Ctrl-F3/F4                  Move a split19:25
kirkland    Ctrl-Shift-F3/F4            Move a window19:25
kirkland    Alt-Up/Down                 Move focus among sessions19:25
kirkland    Shift-Left/Right/Up/Down    Move focus among splits19:25
kirkland    Ctrl-Shift-Left/Right       Move focus among windows19:25
kirkland    Ctrl-Left/Right/Up/Down     Resize a split19:25
kirklandso F2/F3/F4 sort of form your "home keys" for byobu19:25
kirklandwe can briefly look at the refresh commands19:25
kirkland  F5                            Reload profile, refresh status19:25
kirkland    Shift-F5                    Toggle through status lines19:25
kirkland    Ctrl-F5                     Reconnect ssh/gpg/dbus sockets19:25
kirkland    Ctrl-Shift-F5               Change status bar's color randomly19:25
kirklandyou should see a few status items in the bottom right, periodically refreshing19:26
kirklandby default, those refresh every 1 second19:26
kirklandi backed that off to 5 seconds, since there are so many of us here19:26
kirklandI just presed Shift-F519:26
kirklandand now I can see a different set of status19:26
kirklandincluding my cost, hostname, ip address19:27
kirklandctrl-shift-f5 can give your system some personality19:27
kirklandif you have a lot of byobu sessions, seeing them under a different color helps some times19:27
kirkland  F6                            Detach session and then logout19:27
kirkland    Shift-F6                    Detach session and do not logout19:27
kirkland    Ctrl-F6                     Kill split in focus19:27
kirklandperhaps you tried the F6 detach19:28
kirklandshift-F6 will detach from the session, but NOT log you out of the server19:28
kirklandand ctrl-f6 will kill a split19:28
kirkland(perhaps a runaway process)19:28
kirklandOH19:28
kirklandscrollback!19:28
kirklandlet's play with scrollback19:28
kirklandwhich is under F719:28
kirklandand alt-pageup/pagedown19:28
kirklandso now I'm scrolling back through one particular split19:29
kirklandanyway, my time is up19:29
kirklandI'll gladly answer questions over in #ubuntu-classroom-chat19:29
kirklandhopefully you see how you can use shared screen and tmux sessions and byobu in the cloud to do code review and pair programming ;-)19:30
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Adding Ubuntu One to your applications - Instructors: dholbach
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2012/02/02/%23ubuntu-classroom.html following the conclusion of the session.19:30
=== fenris_ is now known as Guest43512
aquariusHi all, and welcome back. I'm still Stuart Langridge from Ubuntu One :)19:44
aquarius(thanks, akgraner :))19:44
aquariusI'm now going to talk about U1DB.19:44
aquariusIn addition to syncing files and music and photos around, it's good to be able to sync data, too19:45
aquariusU1DB is our solution to that.19:45
aquariusIt's still being worked on, and we made a preview release in late December.19:45
aquariusBasically, U1DB is for syncing data -- that is, something structured -- to every device you want.19:45
=== Guest43512 is now known as ejat
aquariusSo, preferences or lists or data of any kind where you don't want to have to represent the data as separate files19:45
aquariusU1DB is an API.19:45
aquariusThe reason for this is so it can be implemented in any language.19:45
aquariusSo someone could build the U1DB API in Python, and then you could use that U1DB library in a Python Quickly app on Ubuntu.19:45
aquariusSomeone else could build the U1DB API in JavaScript, and then you could use that U1DB library in a web app.19:46
aquariusAt that point, you can build the Ubuntu app and the web app, and they can share data.19:46
aquariusThen you could build an Android app which uses U1DB -- again, this would be a standard Android app, in Java -- and it can also share and sync that data with the other apps in Python and JavaScript and whatever.19:46
aquariusSo you've got the ability to build apps everywhere, for every platform, Ubuntu and the web and smartphones and desktops and netbooks, and have them all work with the same data: your data, and your users' data.19:46
aquariusAt the moment, what we've built is called the "reference implementation": it's using Python and SQLite, and includes both a Python client (for use in Python apps), and a server.19:46
aquarius(by the way, you can ask questions in #ubuntu-classroom-chat; just type QUESTION: <your question> )19:47
aquariusLet's try a little bit of code.19:47
aquarius"bzr branch lp:u1db" to get the latest trunk code of u1db.19:47
aquariusWe have early documentation online at http://people.canonical.com/~aquarius/u1db-docs19:47
aquariusIf you take a look at http://people.canonical.com/~aquarius/u1db-docs/quickstart.html#starting-u1db that gives you an example of how to use u1db itself19:47
aquariusYou'll see that U1DB stores "documents" -- JSON documents, that is19:48
aquariusA document can contain anything you want; there's no particular structure imposed on you19:48
aquariusSo if you choose to store all your app's data in many separate documents, or group those documents together somehow, or require certain keys in them, that's fine19:48
aquariusSo, creating a document is done with19:48
aquarius>>> content = json.dumps({"name": "Alan Hansen"}) # create a document19:48
aquarius>>> doc = db.create_doc(content)19:48
aquariusand that's saved that document into the database19:49
aquariusYou use put_doc to overwrite an existing document:19:49
aquarius>>> doc.content = json.dumps({"name": "Alan Hansen", "position": "defence"}) # update the document's content19:49
aquarius>>> rev = db.put_doc(doc)19:49
aquarius(and that returns a revision number)19:49
aquariusU1DB is a revisioned database, meaning that it keeps track of the revision number of a document19:49
aquariusSo it knows when things have changed19:49
aquariusSyncing two U1DBs together is manually commanded by your app, whenever it wants19:50
aquariusBecause U1DB comes with a server, you can test this out for yourself19:50
aquariusU1DB can also be controlled from the command line, which makes testing this stuff easy19:50
ClassBotThere are 10 minutes remaining in the current session.19:50
aquariusIn one terminal, do:19:50
aquarius$ u1db-client init-db first.u1db # this creates a database19:50
aquarius$ echo '{"name": "Stuart Langridge"}' | u1db-client create first.u1db # create a document in it19:50
aquarius(This will print the ID of the new document, and its revision: something like this)19:50
aquariusid: D-cf8a96bea58b4b5ab2ce1ab9c1bfa05319:50
aquariusrev: f6657904254d474d9a333585928726df:119:50
aquariusYou can retrieve that document back again:19:50
aquarius$ u1db-client get first.u1db D-cf8a96bea58b4b5ab2ce1ab9c1bfa053 # fetch it19:50
aquarius{"key": "value"}19:50
aquariusrev: f6657904254d474d9a333585928726df:119:51
aquariusNow, let's run the server in this folder:19:51
aquarius$ u1db-serve --verbose19:51
aquariuslistening on: 127.0.0.1:4363219:51
aquariusNow, you have a U1DB server running on port 4363219:51
aquariusSo, in another terminal:19:51
aquarius$ u1db-client init-db second.u1db # create a second database19:51
aquarius$ u1db-client get second.u1db D-cf8a96bea58b4b5ab2ce1ab9c1bfa053 # try and fetch a doc19:51
aquariusAnd you'll see that that says: Document not found (id: D-cf8a96bea58b4b5ab2ce1ab9c1bfa053)19:51
aquariusbecause that document doesn't exist in second.u1db19:51
aquariusNow, let's sync second with first:19:51
aquarius$ u1db-client sync second.u1db http://127.0.0.1:43632/first.u1db19:52
aquariusAnd now, the document exists in second:19:52
aquarius$ u1db-client get second.u1db D-cf8a96bea58b4b5ab2ce1ab9c1bfa05319:52
aquarius{"key": "value"}19:52
aquariusrev: f6657904254d474d9a333585928726df:119:52
aquariusSo syncing has worked!19:52
aquariusSyncing is over http -- the server is http and provides a nice RESTful API19:52
aquariusWe already have implementations of U1DB under way on other platforms and languages19:52
aquariusThe U1DB team are building a C + SQLite implementation19:53
aquariusdobey is working on a Vala implementation for Ubuntu (lp:shardbridge)19:53
aquariusand I'm working on a JavaScript implementation so that I can write web apps and mobile web apps which sync data with U1DB19:53
aquariusThe documentation at http://people.canonical.com/~aquarius/u1db-docs should tell you all you need to know to get started19:53
aquariusWe hang out in #u1db on freenode and on the mailing list at https://launchpad.net/~u1db-discuss19:53
aquariusSo we'd be very interested in helping you use u1db in your apps.19:53
aquariusThat's a very quick tour around U1DB, what it's going to be like, and how you can get started19:54
aquariussorry for the rush -- I had to fit this talk into 15 minutes :)19:54
aquariusso, if anyone has any questions about U1DB, now's the time to ask them; I've got five minutes before I hand over to kelemengabor19:55
ClassBotThere are 5 minutes remaining in the current session.19:55
aquarius(er, james_w :))19:56
aquarius<jderose> QUESTION: what's the u1db equivalent of couchdb views?19:57
aquariusU1DB indexes. :)19:57
aquariusCreate an index with create_index19:57
aquariusand then you can query that index19:57
aquariushttp://people.canonical.com/~aquarius/u1db-docs/quickstart.html#starting-u1db has an example19:58
aquariushttp://people.canonical.com/~aquarius/u1db-docs/high-level-api.html#document-storage-and-retrieval has more examples :)19:58
aquariusI've got one minute, so thank you all for listening!19:59
aquariusChase us down on #u1db if you have further questions20:00
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Automated packaging with pkgme - Instructors: james_w
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2012/02/02/%23ubuntu-classroom.html following the conclusion of the session.20:00
james_whello everyone, my name is James Westby, and I'm a developer of pkgme20:01
james_wlater you'll be able to play along, if you want to prepare for that then you can run "sudo apt-get install devscripts debhelper python-virtualenv bzr" and then "bzr branch lp:pkgme"20:01
james_wthat should get you set up with the packages you need and get you a copy of the code20:01
james_wwith that out of the way, let's go back to the beginning20:02
james_wpkgme is a tool to help you package applications for Ubuntu20:02
james_wafter you've written an application you need to package it up so that you can get it in to a PPA and then in to the software-center20:03
james_wit may be that you know how to do that already, and if so great, but not everyone knows how to do it already20:04
james_wif you don't know how to do it then you can learn yourself, find someone that does know, or try and use a tool to do it for you20:04
james_win Debian/Ubuntu there are three classes of tool that help you to do this20:05
james_wthe first is like checkinstall, which is nicer than installing software without it, but isn't suited for producing packages to distribute to other people20:05
james_wthe second class is things like dh-make20:05
james_wthis gives you a skeleton to work with, but usually you need to know a lot about packaging to get something useful20:06
james_wso it's mainly used by Debian/Ubuntu developers who want a skeleton to start from, or by those who are reading packaging guides20:06
james_wbut it doesn't really help that last group20:06
james_wthe third class is specialised tools like dh-make-perl20:07
james_wthese deal with one type of package (in that case perl libraries)20:07
james_wthey do it well, but you have to know that they exist20:07
james_wand also they all work differently, and every time someone wants to write a new one then they have to start almost from scratch, and implement the same things such as writing out the package files20:08
james_wso where does pkgme fit in to this?20:08
james_wpkgme sits somewhere between the second and third class20:09
james_wit gets the benefits of the third class, in that it produces good packages with little knowledge required on the users part20:09
james_wbut it has the advantage that it has a single user interface, it re-uses code across the different types of packages, and you there's only one place to look to know if your package type is supported20:10
james_wobviously though, it needs to know how to handle each type of package20:10
james_where a type of package is referring to a set of packages that have a convention about how they should be packaged20:11
james_wthis means you have things like "python with a setup.py"20:11
james_wperl with a Makefile.PL20:11
james_wjava with an ant build.xml20:11
james_wand it extends further as well, we recently added a backend for pdfs, to support the books and magazines that are being sold in Ubuntu Software Center now20:12
james_weach of these types of package is supported through a pkgme "backend"20:12
james_wthe core of pkgme takes care of all the intracacies of debian package files etc., and the backend supplies the knowledge of that type of package20:13
james_wso when you run pkgme it first asks each backend to decide whether it can deal with the type of package in question20:13
james_weach backend returns a score20:13
james_wthey can return 0 if they don't know what it is20:13
james_wor they can return 10 if they know how to provide some information20:14
james_wthe reason it is is score is so that you can have more specialised backends20:14
james_wfor instance, a ruby backend may see a ruby package and report "10"20:14
james_wbut then a ruby-on-rails backend could see that it was really a RoR project, not a plain ruby one, and take over by reporting 20 for the score20:15
james_wthis isn't limited to two levels either20:15
james_wthere may be a particular subclass of RoRs projects that could have its own backend20:15
james_wonce the backends have all reported their scores then the one with the highest score is used for the next part20:16
james_wat this point pkgme starts asking the backend for some information about the project20:16
james_w"what is the name of the project?"20:16
james_w"what is the version?"20:16
james_w"what dependencies does it have?"20:16
james_w"what's the description?"20:16
james_wetc.20:16
james_wonce pkgme has all this information it puts it in to its templates and writes out the packaging20:17
james_wso, let's see how all this fits together20:17
james_wif you have downloaded the branch of pkgme you will see that it has no ./debian/ directory20:17
=== cmagina-lunch is now known as cmagina
james_wthis means that it itself is not packaged20:18
james_wso let's try using pkgme on itself20:18
james_wcd in to the pkgme directory that bzr gave you20:18
james_wand run:20:18
james_wvirtualenv --no-site-packages virtualenv20:18
james_wsource ./virtualenv/bin/activate20:18
james_wpython setup.py develop20:18
james_wpkgme20:18
james_wit will think for a few seconds, and then will have written out the debian directory20:19
james_wit will then try and build the source package20:19
james_wthat may or may not work for you (given that it's supposed to be used by the person that built the app)20:19
james_wthat's it, we didn't have to tell pkgme anything about what we were doing, it just figured everything out, and made some sensible decisions for us20:19
ClassBotThere are 10 minutes remaining in the current session.20:20
james_wit's likely always going to be possible that an experienced packager will find some better way of packaging the app, but that's ok20:20
james_wpkgme will produce something workable, which is the immediate goal20:20
james_wthere's one thing I've glossed over so far20:21
james_wwhat if pkgme doesn't know how to deal with your particular application?20:21
james_wthere are two possibilities here20:21
james_wthe first is that your app looks like one of the types that pkgme knows about, but differs somehow20:21
james_win these cases pkgme will give you an error, or the package won't work20:21
james_wif it doesn't turn out to be a pkgme bug, then unfortunately it's a sign that you will have to learn something about packaging, or find someone that does20:22
james_wwe will try and accomodate different ways of doing things, but we can't have an automated tool know how to deal with everything20:22
james_wso when you are writing an app, stick to the conventions of whatever type of project you are writing20:23
james_wthe second case is that pkgme doesn't know how to handle your type of project20:23
james_win those cases you would need to write a pkgme backend20:23
james_wor at least work together with us to write it20:23
james_wthis doesn't need any packaging knowledge (though it doesn't hurt)20:24
james_was I said before there are two things the backend needs to be able to do20:24
james_wthe first is decide whether a particular project is something it can handle20:24
james_wthis is usually looking for a particular file (e.g. setup.py) and maybe some other checks20:24
james_wthe second thing is answer some questions about the project20:24
james_wwhat the name of it is20:24
james_wwhat the dependencies are20:25
ClassBotThere are 5 minutes remaining in the current session.20:25
james_wall things that don't really need any packaging knowledge20:25
james_wso if you are in this situation find us on launchpad (https://launchpad.net/~pkgme-developers) or on IRC (#pkgme)20:26
james_wand we'll help you write a backend (it takes about an hour to write something useful in my experience)20:26
james_wthen you and everyone who writes the same types of apps can benefit from automatic packaging20:27
james_wany questions?20:27
james_win the meantime I'll write a little about what we at Canonical are building based on pkgme20:27
james_wwhen you submit a commercial application to https://developer.ubuntu.com/dev then Canonical will help you package it20:28
james_win order to speed that process up and allow more applications to be available on Ubuntu we are putting pkgme behind that form so that an attempt will be made to package your app automatically20:28
james_wfor certain types of application at least20:29
james_win addition, we're going to be trying to help libre applications too, by working with the ARB to have pkgme help developers and them to package applications20:29
ClassBottomalan asked: ​ can pkgme als guess dependencies (e.g. by examining PKG_CHECK_MODULE in configure.ac in autotools)?20:29
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Fixing internationalisation bugs - Instructors: kelemengabor
james_wthat would be how it did it for autotools, yes20:30
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2012/02/02/%23ubuntu-classroom.html following the conclusion of the session.20:30
kelemengaborHi everyone!20:30
kelemengaborWelcome to this UDW talk about internationalization (i18n) bugs. I'm Gabor Kelemen, long time Hungarian translator and member of the Ubuntu Translation Coordinators team, with the task of managing i18n bugs.20:31
kelemengaborDuring this talk, I'll show you what are the most common reasons of the presence of untranslated strings on the Ubuntu UI, and how to make those translatable. But first things first, let's start with the basics.20:31
kelemengabor* i18n is a fairly complicated process, where many things have to be in place for the whole process to work.20:31
kelemengabor* These things are documented in the gettext manual: http://www.gnu.org/software/gettext/manual/gettext.html20:31
kelemengabor* Most of the infrastructure documented here works for the software Ubuntu packages, but there are always unpolished edges.20:32
kelemengabor* Most of the problems I'll talk about are *not* Ubuntu-specific, they affect every user of that software, independently of the distribution.20:32
kelemengaborIn theory, you should not see a single English string while running Ubuntu using your native language.20:32
kelemengaborHowever that this is not always the case: even if the translators of your language did their best, you can still run into untranslated text.20:32
kelemengaborThis is what we call an i18n bug. But what can You do with it?20:32
kelemengaborLet's suppose you run Ubuntu Precise, and you see an English string. First thing to check: is it just (yet) untranslated, or not even translatable?20:32
kelemengaborTo do this, you need to click Help -> Translate this application, or if this does not help, look up the template of the application manually on https://translations.launchpad.net/ubuntu/precise/+lang/LL?batch=30020:32
kelemengaborwhere LL is your language code, like de for German or hu for Hungarian20:32
kelemengaborOnce at the template, search for the given string. If you find it untranslated, then translate it!20:33
kelemengaborIf it was translated recently, like a week ago or so, then maybe it is not exported yet into the language pack - there is always a few days delay.20:33
kelemengaborIf it is there since a longer time, or if it is not there at all, then you just found an i18n bug, congratulations :).20:33
kelemengaborRun ubuntu-bug packagename if you know the name of the application (Recommended!), or go directly to https://bugs.launchpad.net/ubuntu-translations/ and report it.20:33
kelemengaborEither case, please include a screenshot!20:33
kelemengaborSo, we have now a bug to solve. Or do we?20:33
kelemengaborIf you don't see anything outstanding, but you would like to help solving problems - great! Go to https://bugs.launchpad.net/ubuntu-translations/ and pick a bug.20:34
kelemengaborYou can also go to https://bugs.launchpad.net/ubuntu/ and search for i18n bugs there - keywords like "translat" or the English name of your language gives plenty of results.20:34
kelemengaborlike 3-5 times more than we have on the ubuntu-translations project20:34
kelemengaborIn an ideal world, all these should be marked as affecting the ubuntu-translations project, but... you might want to20:34
kelemengabormark it as affecting that too, so it can get a little more attention20:35
kelemengaborOnce you picked a bug, you can branch the code of the corresponding package, and start looking for the cause of the problem.20:35
kelemengaborLet's suppose that you already know how to do the branching :).20:35
kelemengaborNow that you have the code, what's the first thing to check?20:35
kelemengaborIt is the presence of the string and grep is your friend here. Packages build upon each other, so maybe what you see untranslated comes from another package.20:36
kelemengaborIf you cannot find the offending string, then you should search in the dependencies of the package. apt-cache can help with this.20:36
kelemengaborI mean in the sources of the dependencies :)20:36
kelemengaborOkay, so you have confirmed that the string is present in the source. It may or may not be present in the template (.pot file), let's see first what went wrong if it is not present in there.20:36
kelemengaborMost common problem is that it is simply not marked for translation.20:37
kelemengaborExample bug:20:37
kelemengaborhttps://bugzilla.gnome.org/show_bug.cgi?id=666773 and its patch: https://bugzilla.gnome.org/attachment.cgi?id=20415020:37
kelemengaborOverview:20:37
kelemengaborFor strings to be extracted into pot files, they need to be marked for translation with the gettext() function, or its shortcut macro, _().20:37
kelemengaborIn the attached patch, we see that this call was forgotten, the solution is pretty simple:20:37
kelemengabor-similar_artists_item = gtk_menu_item_new_with_mnemonic (("Listen to _Similar Artists Radio"));20:38
kelemengabor+similar_artists_item = gtk_menu_item_new_with_mnemonic (_("Listen to _Similar Artists Radio"));20:38
kelemengaborThis applies for C, C++, Vala, and Python sources, other languages / source file types use other calls or methods to mark strings for translation.20:38
kelemengabor(This patch also contains a solution for an other type of problems, so don't close it yet.)20:38
kelemengaborAnother common source of untranslated strings is the po/POTFILES.in file.20:39
kelemengaborExample bug:20:39
kelemengaborhttps://bugs.launchpad.net/bugs/92376220:39
kelemengaborOverview:20:39
kelemengaborThis contains a list of file names, which contain strings marked for translation. This list is maintained manually by the maintainers, who often forget to update it when they add new source files.20:39
kelemengaborLuckily, we have a way to detect such files, and this is the intltool-update -m command.20:39
kelemengaborThis generates the list of missing files, which you most probably want to include in the POTFILES.in file.20:39
kelemengaborSometimes, there are files which really should not be exposed to translators, like sources of automated tests, or .c files generated from .vala sources.20:39
kelemengaborSuch files should go to the POTFILES.skip file. The attached branch illustrates this too.20:39
kelemengaborintltool-update -m has its limitations too - for example, it can currently not detect translatable strings in .vala files, so you are on your own with those.20:40
kelemengaborWhile we are at the POTFILES.in file and intltool-update, I'd like to point out another limitation of the latter. This is file type detection, a prominent source of errors with Glade UI files.20:40
kelemengaborBut we need to take a step back to understand this.20:40
kelemengaborExample bug:20:40
kelemengaborhttps://bugs.launchpad.net/oneconf/+bug/82889720:40
kelemengaborOverview:20:40
kelemengaborIf you have read the gettext manual (okay-okay... you are here because no one does that, including me :))20:40
kelemengaborThat I linked at the beginning, you might have noticed that it speaks about using xgettext20:40
kelemengaborfor extracting the translatable strings from source code into the .pot file.20:41
kelemengaborThis happens in Ubuntu too, so what is intltool anyway?20:41
kelemengaborintltool is a set of scripts, written to make the localization of formats not supported by xgettext possible.20:41
kelemengaborSuch are .desktop files, .xml, Glade UI files, and GConf schemas, among others.20:41
kelemengaborintltool can detect such files based on their extension, but sometimes files have extensions different of the default.20:41
kelemengaborGlade files used to have the .glade extension, but since the latest format change they have .ui (sometimes .xml) extensions.20:41
kelemengaborSo we need to explicitly tell intltool the type of such files. Maintainers forget/don't know this frequently:20:41
kelemengabor-./data/ui/oneconfinventorydialog.ui20:42
kelemengabor+[type: gettext/glade]./data/ui/oneconfinventorydialog.ui20:42
kelemengaborSimple enough, huh?20:42
kelemengaborLet's dig deeper into the gettext system then.20:42
kelemengaborYou might remember that I said earlier:20:42
kelemengaborFor strings to be extracted into pot files, they need to be marked for translation with the gettext() function, or its shortcut macro, _().20:42
kelemengaborThe world is not this simple, unfortunately.20:42
kelemengaborThere are situations in C/Python/others, where you cannot call a function, and gettext() is a function.20:42
kelemengaborSuch are the constant arrays, and their strings should be marked for translation with the N_() macro.20:42
kelemengaborThis is really a no-op, it serves only xgettext, so that it can extract the string into the .pot file.20:42
kelemengaborBut for the program to show the actual translation, you need to call the gettext() function with the array items.20:43
kelemengaborThis is what maintainers often forget and this can be seen in the last part of https://bugzilla.gnome.org/attachment.cgi?id=20415020:43
kelemengaborAll in all, the _() macro marks the string for translation and does the translation at runtime, while the N_() macro does only the marking.20:43
kelemengaborThere are other gettext functions and macros, but there is no time to cover those20:43
kelemengaborIf you made it until this point, you can be fairly sure that the string will make it into the pot file: check it by running intltool-update -p20:44
kelemengaborBut this does not means that the string will show up translated on the UI. We are just at the middle of the class :).20:44
kelemengaborWhen you grepped the source for the untranslated string, you might have found it in all the po files, translated into 20 languages, yet not showing up in any of those languages.20:44
kelemengaborWhat can be wrong at this point?20:44
kelemengaborExample bug:20:44
kelemengaborhttps://bugs.launchpad.net/ubuntu-translations/+bug/84547320:45
kelemengaborOverview20:45
kelemengaborGlade files need a little special attention to set up their i18n in the source code.20:45
kelemengaborUsually, people do something like this - this applies not only for C, but for other program languages too:20:45
kelemengaborGtkBuilder * builder = gtk_builder_new ();20:45
kelemengaborgtk_builder_add_from_file (builder, "something.ui", &error);20:45
kelemengaborThis is not enough, if you want to show your items localized.20:45
kelemengaborAs you can see it in the branch attached to the bug, a gtk_builder_set_translation_domain() call is necessary *after* you create the GtkBuilder object, and *before* you add the items of the .ui file.20:45
kelemengaborSee also: http://developer.gnome.org/gtk3/stable/GtkBuilder.html#gtk-builder-set-translation-domain20:46
kelemengaborSide note: http://developer.gnome.org/gtk3/stable/GtkActionGroup.html#gtk-action-group-set-translation-domain documents a similar need for GtkActionGroups.20:46
kelemengaborMaintainers sometimes forget to do this. No problem, we are here to correct such mistakes :).20:46
kelemengaborOther sources of errors are libraries.20:46
kelemengaborExample bug:20:46
kelemengaborhttps://bugs.launchpad.net/libubuntuone/+bug/90265520:46
kelemengaborOverview:20:46
kelemengaborLibraries can have translatable strings, and the translation of these should be looked up from the translation file of the library.20:46
kelemengaborPretty straightforward, isn't it?20:46
kelemengaborWhen i18n support is initialized in the software, the translation file (also called "domain") to look up strings from is defined.20:47
kelemengaborBut this is never the same as the libraries domain!20:47
kelemengaborSo how can we still see strings from both the program and the library?20:47
kelemengaborLibraries (should) use dgettext() instead of gettext(), which explicitly specifies the translation domain, unlike gettext(), which just uses the default.20:47
kelemengaborglib, on which most Ubuntu GUI software builds, has two convenience headers, which define the _() and some other macros not mentioned here.20:47
kelemengaborOne is gi18n.h, which defines _() as gettext(), and the other is gi18n-lib.h, which defines _() as dgettext()20:48
kelemengaborSometimes, the authors of libraries confuse these two, as you can see in the example bug.20:48
kelemengaborAnother problem might be that initialization of the i18n support is sometimes incomplete.20:48
kelemengaborExample bugs:20:48
kelemengaborfor C: https://bugzilla.gnome.org/show_bug.cgi?id=66651620:48
kelemengaborfor Python: https://bugs.launchpad.net/ubuntu/+source/system-config-printer/+bug/78396720:49
kelemengaborfor Vala: https://bugs.launchpad.net/ubuntu/+source/gwibber/+bug/83753020:49
kelemengaborOverview:20:49
kelemengaborIn the  main source file of each standalone executable, you need a few lines of code to make the i18n work.20:49
kelemengaborThese are documented here: http://www.gnu.org/software/gettext/manual/gettext.html#Triggering20:49
kelemengaborIf the maintainer forgets some of these, xgettext will still extract the translatable strings - yet the gettext() calls won't know where to look for translations,20:49
kelemengaboror which language should they show the strings in.20:49
kelemengaborWhen this happens, usually whole windows and command line outputs show up untranslated, so this kind of problem is easy to spot.20:49
kelemengaborGTK+ only adds to the confusion, because it always calls setlocale() in the gtk_init*() function, so you can get used to not call it, even if you write a program that does not use GTK+20:50
kelemengaborThis is what happened in the first bug.20:50
ClassBotThere are 10 minutes remaining in the current session.20:50
kelemengaborThe other two bugs are not complicated, they just show the complete lack of the crucial few lines in Python and Vala - I leave them here for future reference.20:50
kelemengaborOkay, I think it is enough of possible upstream bugs for today. These were the common ones, but there are many others not mentioned.20:50
kelemengaborThese are upstream ones, because they happen in the code anyone can package for her favourite distribution.20:50
kelemengaborNow I'd like to talk a little about Ubuntu-specific problems, that can happen during the packaging process.20:50
kelemengaborFortunately, there is not so many of these.20:51
kelemengaborExample bug:20:51
kelemengaborhttps://bugs.launchpad.net/ubuntu-translations/+bug/91026820:51
kelemengaborhttps://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/87686620:51
kelemengaborOverview:20:51
kelemengaborIf you want a translation template appear in LP Translation, you need to generate it during the build process.20:51
kelemengaborFor this, usually dh_translations is used, which is a little helper script above intltool, to generate the translation template and prepare the package for use with language packs.20:51
kelemengaborHowever, sometimes it is not in use, which is a bug.20:51
kelemengaborSo you need to make sure it is called, either as an argument of dh, like in the first bug20:51
kelemengaboror as a standalone call in the rules file at the end of the build, like in the second.20:51
kelemengaborIncluding the gnome.mk cdbs rule is also okay, because that runs dh_translations too20:51
kelemengaborThis part is no rocket science :)20:52
kelemengaborAnother possible Ubuntu-specific problem can be untranslated strings in patches.20:52
kelemengaborExample bug:20:52
kelemengaborhttps://bugs.launchpad.net/ubuntu-translations/+bug/88349520:52
kelemengaborOverview:20:52
kelemengaborSome Ubuntu patches add new strings, but the authors sometime make the same mistakes as upstream authors.20:52
kelemengaborGetting those bugs fixed is a little different, because you need to patch the patch.20:52
kelemengaborBut that's all, the possible mistakes are the same as above.20:53
kelemengaborRecommended reading for this is https://wiki.ubuntu.com/PackagingGuide/Complete#Patch_Systems20:53
kelemengaborMost of the time, you need only to use edit-patch, but this is covered better in the guide, so now I just recommend reading it.20:53
kelemengaborMy experience is that it may sound scary at first, but it isn't really!20:53
kelemengaborOkay, we are almost there!20:54
kelemengaborLast thing to talk about is submitting the patch. Where should you go with it?20:54
kelemengaborNow, you have a branch of the Ubuntu package tree, with a fixed bug.20:54
kelemengaborI recommended to branch the Ubuntu tree because you can instantly rebuild your patched package, and test it, which is a Good Thing.20:54
kelemengaborUnless it is an Ubuntu-specific bug, where you can go straight ahead with the "Commit - bzr push - Link a related branch - Propose for merging" dance –20:54
kelemengaborwhich was hopefully covered in other classes this week :) – you need also do the following:20:54
kelemengabor- Get the upstream source, whether it comes from Gnome git, an LP project or anywhere else.20:55
kelemengabor- Create a patch against your Ubuntu-tree20:55
ClassBotThere are 5 minutes remaining in the current session.20:55
kelemengabor- Apply it on the upstream tree (let's assume  it applies cleanly :))20:55
kelemengabor- Submit it into the respective bug tracker of the project.20:55
kelemengaborIf you are lucky, and you chose a project whose upstream is on LP, you can just mark that as also affected, link the branch, submit a merge proposal, and you are done!20:55
kelemengaborThanks for the attention, if there are future questions or you would like to help, you can find me on #ubuntu-translators !20:55
kelemengaborunbelievable, I did it :)20:55
kelemengaborQuestions?20:55
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: How to fix small bugs in Ubuntu - Instructors: warp10
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2012/02/02/%23ubuntu-classroom.html following the conclusion of the session.21:00
warp10Hi all!21:00
warp10Who's here to learn how to hunt down bugs? Raise your hands in #ubuntu-classroom-chat, guys!21:00
warp10Ok, great!21:01
warp10Introductions first: I am Andrea Colangelo, Ubuntu Developer since 2008, with a particular focus on QA, and proudly member of a few teams of the rocking Italian Loco Team too.21:01
warp10In the next ~30 minutes we will have a glance at how to fix small bugs in Ubuntu.21:02
warp10If you followed the previous sessions, you already know how to setup your development box and the tools we use everyday, right?21:02
warp10In this session we will pick a few interesting bugs, already fixed and closed, and we will see how they have been solved.21:03
warp10This will cover both technical and "social" aspects. The latter are extremely important, since they impact the way you relate to you fellow ubuntu developers and upstreams.21:03
warp10One of our very special upstreams is Debian, and very often bugfixing is worth being done there rather than here in Ubuntu.21:03
warp10If you followed Laney and tumbleweed yesterday, they held great sessions about working {in,with} debian. I recommend reading them if you didn't already21:04
warp10So, let's get started!21:04
warp10Our first bug will be: https://bugs.launchpad.net/ubuntu/hardy/+source/abiword/+bug/19444321:04
warp10Although it's quite old right now, it's a nice example of the good old debdiff-way of doing things.21:05
warp10Looking at archive rebuild test result, I noticed abiword did FTBFS. Do you know what does this acronym means?21:05
warp10It stands for "Fail To Build From Source". It's pretty common in Debian/Ubuntu Development: it just means that a source package doesn't compile correctly and doesn't build a binary package. A pretty bad situation, as you can imagine.21:06
warp10To investigate the bug I carefully checked the build log, it is still available here: https://lists.ubuntu.com/archives/ubuntu-autotest/2008-February/018645.html21:07
warp10As you see, it crashes with a sad error: "E: Package libgoffice-0-5-dev has no installation candidate". Nevertheless, the builder itself gives us an hint, saying that libgoffice-0-6-dev replaces it.21:07
warp10What happened is that a new release of libgoffice overseded the older package. A pretty common situation who typically leads to a bad, but easily fixable, FTBFS.21:07
warp10Patch is really simple. I downloaded the source package with `apt-get source abiword`. This command grabs the three files of the source package from archive, unpack the original tarball and applies the diff file containing the debian/ directory. I guess you already had a chance to learn about this in a previous session.21:08
warp10Although we are moving towards using bzr in the Ubuntu Distributed Development way-of-life, knowing the old good methods (who are currently used in Debian!) is still a good thing to know, so questions are welcomed if something is unclear.21:09
warp10The file containing the dependencies needed to build the package is debian/control, so I modified the build-dep name there.21:09
warp10I also changed the changelog to bump the package version number and drop a line about what I did.21:09
warp10!Q21:10
ClassBotkanliot asked: I don't know the location of the debian director, or where the apt-get source files get put21:11
warp10kanliot: debian/directory is in the root of the source tree. And the source package is taken from the archive itself21:11
warp10Then, I simply rebuilt the source package with debuild -S, then compared the two source packages (the original one and the fixed one) with debdiff to extract the patch I attached to the bug report: https://launchpadlibrarian.net/12158067/abiword_2.4.6-3ubuntu3.debdiff21:11
warp10Do you know debdiff? It's a sort of wrapper around the diff utility specifically targeted to debian packages. It produces patches that you can apply to a source tree with patch. Please check `man debdiff` for more info.21:12
warp10At the time I fixed this bug I wasn't a MOTU already, so I created the debdiff, attached it to the bug report, and a couple days later a sponsor uploaded it into archive. Of course, I build-tested my fixed package with pbuilder before submitting the debdiff: you absolutely don't want to propose patch without a thorough testing, do you?21:12
warp10Debdiff sponsored, abiword built, bug fixed! Easy, isn't it?21:12
warp10And please, feel free to ask question in #ubuntu-classroom-chat , just prefix them with "question:"21:13
warp10Anyway, today we tend to prefer the new Ubuntu Distributed Development paradigm. As you know, it uses bzr branches rather than downloading source packages from archive, giving us a bunch of advantages compared to the good old Debian way.21:13
warp10barry had a great session yesterday about this topic, showing you and all the (few) commands and the workflow you need to know to propose a bugfix.21:14
warp10Let's see another bitesize example, using UDD this time. Please, head your browser at maximum warp speed toward https://bugs.launchpad.net/ubuntu/+source/update-manager/+bug/91830221:14
warp10"canceled" or "cancelled", that is the question! (cit.) We had a sort of philological discussion here! Looks like both are fine, but the discussion lead us to say that we want to use "canceled" consistently across the whole program.21:14
warp10You could fix this bug with `apt-get source update-manager` and than following the workflow we saw in the previous bug, but Daniel Polehn decided to do Ubuntu Development on steroids, using bzr.21:15
warp10Downloading the source branch is very simple: `bzr branch ubuntu:update-manager`. This command will download the branch, ready for development, with debian/ directory included and applied already.21:15
warp10The inconsistency is in DistUpgrade/DistUpgradeView.py, so we patch that file, then we add the usual entry in debian/changelog. You can see Daniel'swork in the branch he proposed for merging here: https://code.launchpad.net/~dpolehn-gmail/update-manager/fix-91830221:16
warp10We are almost done! Enough we commit the patch with the usual `bzr commit` and then upload our new branch and open the merge proposal.21:16
warp10This can be easily done with bzr lp-done, which will guide through the process within your browser. More information about uploading and sponsoring of merge proposal here: http://developer.ubuntu.com/packaging/html/udd-working.html21:17
warp10Of course, don't forget to test your work! bzr builddeb will help you generating both the source and debian package.21:17
warp10Any question so far?21:17
warp10Next bug will allow us to talk about a very important topic: working with upstream.21:18
warp10As you all know, Ubuntu is built upon Debian, and very often we import both the packages and bugs from there :)21:18
warp10Therefore, it's often a good thing to send back our patches to Debian. There are a lot of good reasons to do this, someone of them were discussed by Daniel in the first session of UDW.21:18
warp10Let's see an example of good cooperation with Debian: https://bugs.launchpad.net/ubuntu/+source/xemacs21/+bug/488321:19
ClassBotPaoloRotolo asked: How I can find the FTBFS bugs on Launchpad? There is a list?21:19
warp10PaoloRotolo: very good question21:20
warp10PaoloRotolo: ubuntuwire is plenty of resources about QA and FTBFS21:20
ClassBotThere are 10 minutes remaining in the current session.21:20
warp10PaoloRotolo: point your browser to http://qa.ubuntuwire.com/ annd especially to http://people.ubuntuwire.org/~wgrant/rebuild-ftbfs-test/21:20
warp10so, back to the bug above21:20
warp10We have a problem with xemacs21 info pages here, and debian has the very same issue. This is a very ancient bug, but don't care, we are interested more to the "spirit" of this bugfix rather than to technical aspects.21:20
warp10Scroll through the discussion in this bug report and go to comment #9. Ralph Janke proposed a debdiff here (generated in a very similar way to how we saw in the first bug). After attaching the patch, Ralph answered to the debian bug too (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=330253), informing the debian maintainer that a patch was available in ubuntu.21:21
warp10Actually, the debdiff got improved in the following days, and eventually arrived to an optimal version. This debdiff was used by the debian maintainer to upload a fixed package in Debian. Later, the package was synced from Debian, and the fix arrived in Ubuntu as well.21:21
warp10Don't you think this is a great way of working with bugs? This way we avoid adding a useless delta from debian, give back something to debian, improve our relationships with our upstream, allow other debian derivatives to take advantage, and even more.21:21
warp10Actually, we can even go more far away, suggesting patches to the upstreams of our immediate upstream Debian, like we did in this bug: https://bugs.launchpad.net/ubuntu/+source/gnome-power-manager/+bug/39724821:22
warp10The problem here involves GNOME, so it's worth sending a patch to GNOME itself, rather than sending it to Debian only.21:22
ClassBotkelemengabor asked: what should I do if I want to hack on a particular package, but its bzr branch is outdated? like, Transmission in Precise.21:23
warp10kelemengabor: Just stick to the good old apt-get source and grab it straight from archive21:23
warp10So, back to the bug. IT is a little bit nasty here, and involves some advanced knwoledge about gdb, but we don't care this so much: the Internt is plenty of resources about debugging with gdb.21:23
warp10As you can see from the debdiff at comment #14, the patch is so small, but involved a little bit of work to get there and to understand what was going wrong. Don't worry, you absolutely don't need to be a gdb master to be a great MOTU.21:24
warp10You need good communication skills, instead, and Scott Howard reported the bug to the GNOME bug tracker (https://bugzilla.gnome.org/show_bug.cgi?id=588259) and added his findings too, giving a great help to the upstream developer to write a patch.21:24
warp10This way, the patch got integrated from GNOME and in a few days flowed downstream to Debian and Ubuntu. That's great!21:24
warp10So, all in all, what we learn from all of this? A lot of things:21:25
ClassBotThere are 5 minutes remaining in the current session.21:25
warp101- fixing bugs in Ubuntu is easy and makes lot of people happy! :)21:25
warp102- it's not a matter of a being a great programmer. You rather need good communcation and detective skills21:25
warp103- you are not alone! Your fellow ubuntu developers and sponsors are there to help, teach you and give great hints to improve your work. Don't hesitate to ask in #ubuntu-motu or ubuntu-motu@ if you are in trouble!21:26
warp104- upstreams matter. Don't add useless deltas from debian, rather cooperate with debian developers to get the best for both worlds.21:26
warp10For more information about Bug triaging, please refer to: https://wiki.ubuntu.com/Bugs21:27
warp10Another interesting wiki page about bugfixing is: https://wiki.ubuntu.com/Bugs/HowToFix21:27
warp10And of course, the main entry point for everything about Ubuntu Development: https://wiki.ubuntu.com/UbuntuDevelopment21:28
warp10Ok, guys, this ends our travel across the bugfixing world21:28
ClassBotpawel_st_ asked: kelemengabor realized that a package was outdated in bzr branch. Why is that, do you always have to check if apt-get source provides newer version?21:28
warp10pawel_st_: you will be warned by bzr if bzr source branch is outdated21:29
warp10pawel_st_: sop, no need to apt-get source just to check it21:29
warp10Ok, hope you got eager to fix bugs, guys!21:29
warp10And now, everybody stand here to listen cprofitt who will tell us great things about life-cycle of bug reports in Ubuntu.21:30
* warp10 says "Ciao a tutti!"21:30
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Problem Lifecycle in Ubuntu - Instructors: cprofitt
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2012/02/02/%23ubuntu-classroom.html following the conclusion of the session.21:30
* cprofitt says hello21:30
cprofittWelcome to Problem Lifecycle in Ubuntu.21:31
cprofittLet me introduce myself. I am Charles Profitt and have been an Ubuntu Member since January of 2009 and involved Loco Community.21:31
cprofittThis session is a result of a UDS-O I led on improving the community involvement with Bugs. That session was focused on the end users, not the developer or QA groups.21:31
cprofittIn this session I will try to focus this on the developer and QA part of the Ubuntu community. I encourage questions to be asked at any time.21:31
cprofittTo ask a question, you need to be in #ubuntu-classroom-chat and ask your question in the following format:21:32
cprofittQUESTION: <your question here>21:32
cprofittnote: If you do not begin the line with QUESTION:, ClassBot will not recognize it, and your question will most likely not get answered.21:32
cprofittthe previous session was on fighting bugs,... but this session will focus on 'problems'21:32
cprofittThe first thing to remember is that a problem and a bug are not the same. While bugs to cause problems they are not the sole cause.21:32
cprofittThe next important part is to remember that we have three distinct groups in our community.21:32
cprofitt1 - Users21:33
cprofitt2 - Technical Users - Systems Administrators or More Advanced Users21:33
cprofitt3 - Developers - app developers, packagers, patchers, etc21:33
cprofittthe users group is and will continue to be the largest group21:33
cprofittwhen Ubuntu started that group was very technical, but as the ease of use has increased the groups has increasingly become composed of less technical users21:34
cprofittthis is a good thing!!21:34
cprofittThe final general piece is that bugs are best resolved in development releases and not in stable releases. Once a release is stable there is a much more detailed and stringent process that has to be followed for an update to be released (SRU - Stable Release Update). This is due to the requirement to not cause a cascade of 'bugs'.21:34
cprofittThis creates a bit of a problem because most, if not all, of the people that fall in the 'users' group will not be running the development release. In fact, many of the technical users will only run the development release on spare equipment.21:34
cprofittAs our community grows the percentage of Ubuntu users will largely be in the users group and with the developers ending up as the smallest group. To sustain growth it is essential for the entire community to understand the Problem Life Cycle in brief.21:34
cprofittWhy do I call it the Problem Life Cycle?21:35
cprofittBecause all bugs start with a problem. A problem might be resolved by a configuration being corrected or it could truly be a bug.21:35
cprofittThe resolutions of problems start prior to bug reports; bug reporting is for when a problem can be identified as being caused by a bug.21:35
cprofittHere is a link to the diagram about the Ubuntu Problem Cycle.21:35
cprofitthttp://ftbeowulf.files.wordpress.com/2011/11/ubuntu-problem2.png21:35
cprofittthe diagram was just translated this week as well...21:36
cprofittand I would appreaciate anyone willing to translate it in to their language21:36
cprofittThe Ubuntu Community has several resources for users seeking help with a problem; they are:21:36
cprofittUbuntu Forums - ubuntuforums.org21:36
cprofittAsk Ubuntu - askubuntu.com21:36
cprofittIRC - multiple channels on freenode21:36
cprofittUbuntu Wiki - help.ubuntu.com/community (community) or help.ubuntu.com (official)21:36
cprofittLocal Community Teams - as my friend Randal says -- boots on the ground21:37
cprofittYou see this in the first set of boxes in the diagram. If a problem is solved here it is due to a misconfiguration or a mis-understanding of what a piece of software does. I do not consider a work-a-round a solution.21:37
cprofittif you are a developer it can help that you are familiar with these areas21:37
cprofittit might help expose items that are not bugs, but that are causing users difficulty21:37
cprofittfor application developers looking to have their applications grow in popularity this can be crucial21:37
cprofittYou see this in the first set of boxes in the diagram. If a problem is solved here it is due to a misconfiguration or a mis-understanding of what a piece of software does. I do not consider a work-a-round a solution.21:38
cprofittIf a problem in a stable release is not solved then a user can either wait for the next release or embark on a process that in the past usually ends in frustration for them. That frustration stems from a misperception of the lifecycle.21:38
cprofittthis misundertanding is important...21:38
cprofittand we can not, as a community, respond with phrases like RTFM21:39
cprofittregardless of stable or development release; the most important part of bug resolution is in the triage process. Reports must be complete and accurate.21:39
cprofittA great resource for reporting bugs can be found here:21:39
cprofitthttps://help.ubuntu.com/community/ReportingBugs21:39
cprofittRealize that some bugs are not crashes, but unexpected behavior. As a very simple example imagine a calculator that gave a result of 5 for 2+2. It would not crash, but it would still have a bug that results in unexpected, and inaccurate, results.21:40
cprofittFor crashes application developers should strive to write error handling code that can provide the end user with meaninful data that can be reported back to the developer.21:40
cprofittAs a person who supports proprietary sofware in my day job I am very used to errors that tell me nothing more than what I already know --21:41
cprofittlike -- your app crashed21:41
cprofitttry to add information that you, as a developer, will need to find the bug21:41
cprofittnot always easy; I know21:41
cprofittOn the chart app developers would fall in the 'upstream' category. You should ensure that you have a process for bugs to be filed against your application.21:42
cprofittApp Developers also have to understand that Ubuntu will not usually push your 'patches' in to a stable release.21:42
cprofittIf you are involved in bug triage you really need to strive to be friendly and helpful to the user reporting the bug if you wish to keep them engaged. I understand that some reports are a 'waste of time', but take those as an opportunity to help the person reporting the bug learn how to complete better reports.21:42
cprofittWe also have to understand that waiting for the next release is not a 'bad' thing. Many users are coming from the Microsoft world and are used to new releases being three to five years apart. Remind yourself, and the users, that Ubuntu will put out six releases in a three year period of time. A potential six month wait is a small price to pay for the stability of the release.21:42
cprofittso to summarize so far21:43
cprofittUsers will experience a problem (may or may not be a bug)21:43
cprofittthey will use any of the several community support resources to seek a solution21:43
cprofittthe solution could be a configuration change or a work-a-round21:43
cprofittafter that if their problem is not resolved they may choose to submit a bug report21:44
cprofittif that bug report is against a stable release it will have to go through a stringent process before having an SRU update21:45
cprofittif it is in a development release the liklihood of getting it fixed is much higher21:45
cprofittand the payback for the community that much greater21:45
cprofittthis process is captured at a high level here:21:46
cprofitthttp://ftbeowulf.files.wordpress.com/2011/11/ubuntu-problem2.png21:46
cprofittany questions?21:46
cprofittI understand this process has been very abstract...21:48
cprofittmore of a high level over-view21:49
cprofittone thing to keep in mind is some of the potential end points for bugs21:49
cprofittwhen a developer marks a bug 'will not fix' it might be a case of 'can not fix'21:50
ClassBotThere are 10 minutes remaining in the current session.21:50
cprofittconsider the case of xubuntu which depends on upstream21:50
cprofittthere may be times when the upstream has decided a specific version is no longer supported21:51
cprofittbut Ubuntu promises support for an LTS beyond that point21:51
ClassBotpawel_st_ asked: One of the common complaints about ubuntu bug tracking and fixing is that there are bugs that span multiple releases and don't seem to be taken care of properly (sorry, can't give you an example from top of my head). What would you say to that critique?21:51
cprofittproperly is potentially a result of not understanding the lifecycle21:52
cprofittonce the bug is in a stable release it may not get fixed if there is the potential of it causing stability issues21:52
cprofittin other cases, like the LTS21:52
cprofittupstreams may not be supporting the version of the product included21:53
cprofittthe other issue is even with +1 or +2 bugs the fix might depend on an upstream developer21:53
cprofittthis is one area triagers can help21:54
cprofittby learning how to report bugs upstream properly21:54
cprofittor guiding the reporting end user how to report it upstream21:54
cprofittI agree completely that the process can be frustrating when you report a bug and it does not get fixed21:55
ClassBotThere are 5 minutes remaining in the current session.21:55
cprofittI have reported bugs for four years and only twice had updates released for my reports21:55
cprofittI think the key is really helping bug reporters have proper expectations as to how things get fixed21:56
cprofittbugs in an SRU will rarely get fixed21:56
cprofittbugs in +1 or +2 that are upstream will only get attention if they go upstream properly21:56
cprofittMy hope is that we can build a process of ensuring that our entire community has a overview of the process so that they have a reasonable set of expectations21:57
cprofittto avoid the 'rage' I see in bug reports on occassion21:58
cprofittand to avoid triager and developer burn out21:58
ClassBotkanliot asked: what is an SRU21:58
cprofittand SRU is a Stable Release Update21:58
cprofittwhen a part of the Stable Release gets a patch.... it is called an SRU21:59
cprofittthank you to everyone who attended21:59
cprofittI hope that this session can spark community discussion about this so we can move forward and manage our communities growth21:59
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2012/02/02/%23ubuntu-classroom.html22:00
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat ||
=== dduffey is now known as dduffey_afk
=== ysnoi is now known as TheYsNoi

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