/srv/irclogs.ubuntu.com/2009/09/04/#ubuntu-classroom.txt

=== Amaranth_ is now known as Amaranth
=== vorian is now known as s8n
shadeslayerhas it started?16:49
dholbachnot yet16:49
dholbach11 more minutes16:49
dholbachhttps://wiki.ubuntu.com/UbuntuDeveloperWeek16:49
shadeslayeroh...16:49
shadeslayerLaney: can you point me to some basic packaging links.... im like a absolute 101 at this16:50
dholbachshadeslayer: https://wiki.ubuntu.com/PackagingGuide and more generally: https://wiki.ubuntu.com/MOTU/GettingStarted16:51
shadeslayerdholbach: thanks16:52
=== qwebirc24188 is now known as Quintasan
dholbachHELLO EVERYBODY! WELCOME TO THE LAST DAY OF UBUNTU DEVELOPER WEEK!16:59
pitti\o/16:59
Kmoshi :)17:00
dholbachFirst up we have three heroes, dpm, danilos and pitti, who are going to talk about "Translations for developers"!17:00
c_kornhey ho17:00
dpmhi! \o/17:00
dholbachas always please keep the chat in #ubuntu-classroom-chat and ask your questions there too17:00
danilosheya17:00
dholbachplease make sure you prefix them with QUESTION:17:00
dholbachalso... if you're not comfortable with English and need to ask questions in your language, try one of these channels:17:00
dholbach * Catalan: #ubuntu-cat17:00
dholbach * Danish: #ubuntu-nordic-dev17:00
dholbach * Finnish: #ubuntu-fi-devel17:00
dholbach * German: #ubuntu-classroom-chat-de17:00
dholbach * Spanish: #ubuntu-classroom-chat-es17:00
dholbach * French: #u-classroom17:00
dholbach(this fits quite well with the topic of Translations, hm? :))17:00
dholbachEnjoy the sessions and take the offer to get involved seriously! :-)17:01
dholbachdpm, danilos, pitti: the floor is yours!17:01
pittiHello all!17:01
danilosdholbach: thanks17:01
pittiI'm Martin Pitt from the Ubuntu Desktop Team, and more or less the creator of the "language pack" system we have used in Ubuntu since 2005.17:01
danilosHi all, I am Danilo and I lead the Launchpad Translations development team: Launchpad is an open source foundation for Ubuntu i18n and l10n17:01
dpmHi everyone, my name is David Planella, I'm the Ubuntu Translations Coordinator and as such my job is to keep the Ubuntu translation community rocking17:01
pittiIn Ubuntu we spend quite some effort on translation of software and move translations around a lot, so that we can clearly separate the actual packaged software from the translations which belong to it, for the following main reasons:17:02
pitti * Make it as easy as possible for non-technical contributors to help translating software.17:02
pitti * Deliver translation updates to stable Ubuntu releases without having to touch the actual software packages, and thus jeopardizing their stability.17:02
pitti * Have a good control which translations land on the release CD images, to mitigate space constraints.17:02
pitti== What are language packs? ==17:02
pittiLangpacks are packages which contain translations for a particular language for software that we ship in Ubuntu main. Universe and multiverse are not currently handled by this system.17:02
pittiThe basic idea is that the actual programs are packaged without any translations, and if you are using an e. g. Portugese desktop, you need to install the Portugese language pack to have Ubuntu talk Portugese instead of English to you.17:03
pittiAs an user, you don't usually need to worry about this too much, since the installer takes care to install what you need, though. There's also the "Language selector" in the System menu which allows you to install more.17:03
pittiIn order to avoid unnecessary downloads, wasted CD space, and wasted installation hard disk space, there is not just one langpack for a particular language, but they are split into "categories" (GNOME, KDE, and common), so that a pure Ubuntu installation does not need to carry GNOME translations.17:03
pittiE. g. the "language-pack-gnome-pt" package ships Portugese translations for all GNOME related packages in main.17:04
pittiTo further complicate the issue, there is another split between "-base" and "update" packages. The idea is that the bulk of translations is usually ready and done by the final release of Ubuntu, and we want users to not have to download the same things over and over again. So the "-base" packages are big and contain the state of translations as it was at release time, while the "update" packages17:04
pittiare small and only contain the delta since the release.17:04
pittiThat's why there is not just "language-pack-gnome-pt" (the update package), but also "language-pack-gnome-pt-base".17:04
pittiThus for a single language you usually have a set of six related language-pack-* packages. This makes things a bit convoluted, but makes the system reasonably efficient.17:05
pittiQuestions so far about this split?17:05
pittiseems not17:06
pitti== Translation formats ==17:06
pittiBy far the most known and used method of translating Linux software is "gettext".17:06
pittiIt17:06
pitti * wraps the translatable strings in the software into a special function _("Hello")17:06
pitti * extracts those strings into a template file which contains all the transatable strings (called the "PO template")17:06
pitti * compiles human-readable and editable translation files (*.po) to binary "*.mo" files which provide super-fast access at runtime17:07
pitti * uses the installed *.mo files at runtime to map an English string to a translated string.17:07
pittiA typical record in a gettext PO file looks like this:17:07
pitti   msgid "Good morning"17:07
pitti   msgstr "Доброй утро"17:07
pitti(this would be in the ru.po file for Russian)17:07
pittiLaunchpad and the Ubuntu langpack system have fully supported gettext from day one.17:08
pittiUnfortunately there is not just gettext in the Linux world, but also other vendor specific systems, mainly due to the fact that these appliciations did not originate in the Unix world.17:08
pittiThe prime examples here are Mozilla software (Firefox et al) which use "XPI", and OpenOffice.org which uses a system called "SDF".17:08
pittiLaunchpad and langpacks grew support for XPI about a year ago, so that Launchpad can be used to translate Mozilla software now. SDF is not yet handled by Launchpad or langpacks.17:08
pittiFor about a week now in karmic, we also started handle GNOME help file translations.17:09
pittiWhile they use gettext in principle, the translated files are assembled at build time, and packages ship the readily translated XML files and translated screenshots directly.17:09
pittiThey take a lot of space, so we now strip them from the actual packages, temporarily park them in Launchpad, and put them into the language packs. But they are really just copied verbatim right now, there is no Launchpad support for updating the help translations yet.17:09
pittiquestions about translation format?17:09
pittiplease also yell in #chat if I'm too fast/slow17:09
pittiok, so let's talk a little how translations make their way from the translator to the user's desktop17:10
pitti== Flow for gettext translations ==17:10
pittiSince gettext is pretty much the only system which you should need to know, I would like to concentrate on that from now on.17:11
pittiI like to explain how translations make their way through this system, to allow developers to be aware of the needs of translators, and how translations make it to the final desktop.17:11
pittiThe 1000 m perspective looks like this:17:11
pitti(details will follow, don't worry)17:11
pittitranslations in upstream tarball → extract at package build time → import into Launchpad17:11
pittitranslation community → add/change strings on Launchpad17:11
pittiLaunchpad translation export → sort them by language and category → generate language-pack-*, and upload them17:12
pittiDanilo and David will talk in detail about the Launchpad part later on, so I'll give some details on the packaging related bits.17:12
pitti== build time extraction ==17:12
pittiThe majority of translations come from the already existing shipped PO files in the upstream tarballs. These need to be extracted and imported into Launchpad, and the compiled MO files be removed from built application packages.17:12
pittiThis is done by a script "pkgstriptranslations" from the "pkgbinarymangler" package. That package is installed in the Ubuntu build servers, but of course you can also install it locally to see what it does.17:13
pittiFor the import to actually succeed and work well, packages must ship or build an up-to-date PO template, i. e. the template must be an accurate list of all translatable strings in the application.17:13
pittiIt is greatly preferred to have this generated at build time (usually with "intltool-update -p"), to ensure that it isn't stale, and also contains the added/changed strings we do in Ubuntu patches.17:13
=== nixternal_ is now known as nixternal
pittiIf the package uses cdbs and includes gnome.mk or translations.mk, this will be taken care of automatically. All other packages need to be fixed to build a PO template. (This should be the case for almost all packages in Ubuntu main nowadays.)17:14
* pitti hands mike to danilos17:14
danilosthanks pitti; so, let me go on a bit with this17:14
danilos= Package structure =17:14
danilosAs Martin mentioned, POT and PO files are produced as part of binary builds: for Launchpad to import translations correctly, make sure your builds do produce POT files, or translations will not be up to date (or not imported at all with a new package).  Also, note that this process happens only for source packages which are in Ubuntu 'main'.17:14
danilosNote that you can have multiple translation templates (POT) for different purposes.  Eg. a library POT and main UI POT: but make sure that you keep relevant translation PO files in the same subdirectory as their respective POTs.17:15
danilosAlso, don't worry about merging PO files with latest POT files: Launchpad does that for you with a very smart algorithm not losing any contributions and worrying about conflicts.17:15
danilosKDE is special in the way POT files are built and where translations are pulled out of: https://wiki.ubuntu.com/Translations/Upstream/KDE/KubuntuTranslationsLifecycle17:15
danilosAfter all translation files are stripped off, they end up in Launchpad translations import queue: https://translations.launchpad.net/ubuntu/+imports17:16
danilos= Import queue =17:16
danilosOriginally, when they enter the import queue, they are put into 'Needs review' state.  For templates, if a base path and filename matches a template Launchpad has previously imported in that source package, it is considered an update of that template, attached to it and marked as 'Approved'.17:16
danilosFor translations, Launchpad tries to match them against existing templates and existing language codes.  Launchpad on purpose recognizes only  "the shortest possible" language codes: use "es.po" and "de.po" and not "es_ES.po" or "de_DE.po".17:16
danilosFor anything that can't be automatically approved, it's stays in the queue for someone to look at.  If you wonder who that someone might be, I introduce you to...17:17
danilosdpm: tell us more about what UTC stands for :)17:17
* dpm gets the mike17:17
dpmUTC stands for Ubuntu Translations Coordinator or the17:18
dpmUbuntu Translations Coordinators Team17:18
dpmThe Ubuntu Translations Coordinators team is a group of wonderful people who takes care of all the manual adjustments, reporting more technical issues and in short caring for Ubuntu translations.17:18
dpmHere you can see them sporting their good looks: https://launchpad.net/~ubuntu-translations-coordinators/+mugshots17:18
dpmThe team was born from the intention of making the technical and all the behind-the-scenes work more open to the community. As such Launchpad Translations has been progressively getting more permissions on different levels and granting them to these trusted community members.17:19
dpmSo they can participate in the process17:19
dpmOne of the main tasks of the UTC team is to manage the imports queue and manually approve, tweak or block translation templates which the auto-approver script cannot automatically handle. They can also decide which translations must be included in language packs.17:20
dpmAnd here's a link to the Karmic imports queue, for those interested in horribly long links: https://translations.edge.launchpad.net/ubuntu/karmic/+imports?field.filter_extension=pot&field.filter_status=NEEDS_REVIEW&start=0&batch=15017:21
danilosdpm: thanks!17:22
* danilos fights with dpm over mike17:22
* pitti stumbles over the cable17:22
danilosAlso, if you want your package (in 'main') translations exported into language packs, you can have UTC team set it up: if they don't, you'll have to manually download translation tarballs from Launchpad and use that export when building updated version of the package.17:22
danilosDoes anyone have any quick questions so far about how stuff gets into the queue and how it gets approved?17:22
dpmQUESTION: What is the official way to contact UTC?17:23
dpmThe UTC has got a mailing list, and you can also contact them by filing a request to the Answers system on the ubuntu-translations project17:24
dpmhere are the relevant links:17:24
dpmhttps://wiki.ubuntu.com/Translations/Contact/#Ubuntu%20Translations%20Coordination17:24
dpmhttps://answers.edge.launchpad.net/ubuntu-translations/+addquestion17:25
dpmfollowing the first link you'll also be able to consult the public mailing list archives17:25
dpmAny other questions on UTC? Or anything else so far?17:25
danilosI guess not :)17:26
danilosso, let's see what happens next17:26
danilos= Translation =17:26
danilosAfter files have been put into 'Approved' state (either automatically or manually), they are imported into Launchpad: usually very quickly, but some uploads can take longer than others (like KDE-l10n and OpenOffice.org with their 20k files each can take around a day).17:26
danilosAfter POT and PO files have been imported, it's possible to use Launchpad web UI to translate Ubuntu: it provides an easy to use interface but with some advanced features on top of it.  The easy way is: go to a web page, look at the English string, fill in a text box with your suggested translation, and save the page.17:27
danilosThe more advanced way to do translation is to download a PO file, work on it offline, and then upload it back.  And Launchpad will worry about any conflicts, and will do it on per message basis: if you translated the same string someone translated online at the same time, it will make your translation a suggestion and let you know about it.17:27
danilosOne of the cool new things is that translators can only work on one version of the project (i.e. trunk series for a project, or Jaunty for Ubuntu), and if relevant, their work will be reflected in all the other versions as well.17:27
danilosSo, you do a translation of "Open file" in Jaunty.  You don't have to go to Karmic to do the translation there as well, it will be automatically propagated.  We call this feature "message sharing".17:28
danilosTo control access to translation, Launchpad offers translation groups: they are a list of translation teams matched by language.  Only people who are part of those translation teams can 'approve' others' translation suggestions: without approval, their translations are never made active.17:28
danilosAll this is made possible by the Launchpad development team consisting of henninge, jtv, Ursinha and me: find them in #launchpad and say hi!  Also, you can become part of the team as well, remember Launchpad is open source now!17:28
danilosUbuntu has a vibrant translation community as part of 'Ubuntu translators' group.  But, I'll let David tell you more about it.17:29
danilosdpm: I heard to get an Ubuntu translation it doesn't just take a nice platform, you need some people as well? :)17:29
dpmsure, nice and exciting people17:29
dpmI'll take it from where Danilo was mentioning translation groups...17:30
dpmFirst of all, the permissions for translating projects (or distros in the case of Ubuntu) are organised around _translation groups_, to which project maintainers can assign the translations to.17:30
dpmThe biggest translation group in Launchpad is the Ubuntu Translators group. There (https://translations.edge.launchpad.net/+groups/ubuntu-translators) you can see that there is a second level of permission translation communities use to organise themselves: _translation groups_ are containers for _translation teams_17:31
dpmTranslation teams are where the exciting stuff takes place17:31
dpmCommunities get organised in teams around Launchpad and use it to translate Ubuntu17:32
dpmAt the risk of repeating what Danilo has already said, I'll reinstate that: although everyone with a Launchpad account can provide translation suggestions, only those translators in an Ubuntu translation team will be able to approve them or to submit them themselves.17:33
dpmthis means that everyone can get introduced to the world of translations easily17:34
dpmbut at the same time, only experienced translators will be able to accept suggestions, maintain a level of translation quality and guide newcomers into the process of becoming full-fledged translators17:35
dpmso let's talk about upstream/downstream relationships17:36
dpmdanilo, do you want to take it from there?17:36
danilossure, thanks dpm17:36
danilos= Upstream and downstream =17:36
danilosUbuntu makes a lot of use of upstream software.  Some of it is Ubuntu's own, like upstart or jockey.  And yet others are completely independent like Evolution or Firefox.17:36
danilosWith package builds for 'external upstream' applications, you usually get translations from upstream integrated by including the upstream PO files in the build. For 'internal upstream', they are usually hosted in Launchpad as separate projects, and they require some care to make sure people are not confused about where to do their translation.17:37
danilosNote that upstreams usually do not update translations for 'older' versions: that's what Launchpad allows Ubuntu to do.  You can still update Hardy translations and they will be reflected in the next language pack update.17:37
danilosnow, how do we get to language packs?17:37
danilos= Exporting language pack tarballs =17:38
danilosAfter translations have been done in Launchpad, Launchpad aggregates all the translations for a single Ubuntu release and puts it in a tarball.  Launchpad calls that "language packs", but they are just the base tarballs used to construct final language packs you get installed on your system.17:38
danilosLaunchpad does weekly exports of language pack tarballs, with the following schedule: http://dev.launchpad.net/Translations/LanguagePackSchedule17:38
danilosAfter they are produced, they are listed on distribution release language packs page, eg. https://translations.launchpad.net/ubuntu/jaunty/+language-packs17:38
danilosThere are two slightly different types of tarballs Launchpad can produce: either a full tarball (for pitti called "base") containing all translations for templates marked as included in language packs (don't forget about that bit), or only those translations which have been updated since the last full language pack was released — called a "delta language pack" in Launchpad, and "update" package in Ubuntu.17:39
danilosQUESTION: how launchpad handles the translation's return to its original mantainer?17:39
danilosalways an interesting matter: Launchpad provides two things: a translation platform for Ubuntu and for projects who use Launchpad as their base translation portal17:40
danilosin case of Ubuntu, translations done in Launchpad are mostly updates to existing upstream translations17:40
danilosWith a wide variety of upstreams that Ubuntu uses, there is simply no way Launchpad can know all the ways to send updated translations back in good manners (i.e. not considered spam or aggressive)17:41
danilosso, Launchpad provides a facility to help translators submit their work upstream themselves: when they go to export a translation from Launchpad, they can choose to export only those translations which have been changed17:42
danilosby ticking the 'Export only changed translations' box on PO file export page17:42
danilosthat file can then be sent to the original maintainer for inspection and merging with the upstream translation17:42
danilosI hope this answers this question17:43
danilosI want us to get back to language pack production: I'll let pitti tell you what happens next after Launchpad produces tarballs with translation files17:44
pitti== langpack-o-matic ==17:44
pittiThe upstream and Ubuntu community translations get merged together in Launchpad, and then regularly get exported as a huge tarball which contains all translations for all applications.17:44
pittiThe job of dissecting this 500 MB monster and producing installable debs is done by a set of scripts that I called "langpack-o-matic".17:44
pittiIt has a set of package skeletons for language-pack-*-base and language-pack, and instantiates a group (base/update and gnome/kde/common) of them for each language that is present in the export.17:45
pittiFor deciding what is a GNOMEish or a KDEish package it currently uses some heuristics, looking at the package description, dependencies, and so on.17:45
pittiBased on the categorization and language, it sorts the files into the generated language-pack-* source packages. It also adds some extra data, such as converting Mozilla related gettext translations into XPI files, or ship flag images for KDE.17:45
pitti== Testing ==17:45
pittiFor the current Ubuntu development release, langpack-o-matic uploads the generated langpacks straight to the archive, i. e. Karmic at the moment.17:46
pittiThat way, they get maximum testing, and we aren't concerned about small regressions within the development release17:46
pittiFor stable releases we need to apply more care; since translations have the potential to break software, or just regress in quality, they need to get thorough testing before they get uploaded to e. g. jaunty-updates.17:46
pittiFor this, we have a personal package archive where langpack-o-matic uploads updates for stable Ubuntu releases on a weekly basis. If you are translating Ubuntu software on Launchpad, or just would like to help testing, please enable this PPA to always get the latest translations, and report problems immediately.17:46
pittiUsually, the PPA packages are uploaded to -proposed once a month, then dpm sends out a call for testing on the translators mailing list, and once we can be reasonably sure to not have broken much, they get to -u17:47
pittipdates for general consumption.17:47
pittithis answers: fran_dieguez_| QUESTION: How often the language-pack-update are updated at stable releases?17:47
pitti== Links ==17:47
pittiDetails about all the involved processes: https://wiki.ubuntu.com/Translations/TranslationLifecycle17:47
pittipkgbinarymangler package: https://launchpad.net/ubuntu/+source/pkgbinarymangler17:48
pittilangpack-o-matic project, bugs, code: https://launchpad.net/langpack-o-matic17:48
pittiWeekly langpack PPA: https://launchpad.net/~ubuntu-langpack/+archive17:48
pitti== Q & A ==17:48
pittiI propose we go in order of #-chat now17:48
danilospitti: yeah, let's do that17:48
pittiqense| QUESTION: A bit late, but does the _() function also works in Python? What module do you need to import?17:49
pittiI think I'll take that17:49
pittiPython has a gettext module for that17:49
pittiit doesn't export _() by itself, but it's easy enough to do it with17:49
pittifrom gettext import gettext as _17:49
danilos== More links ==17:50
danilosGeneral i18n info for developers (packaging and coding): https://wiki.ubuntu.com/UbuntuDevelopment/Internationalisation (I'll try to have the page in a readable state by tomorrow)17:50
danilosUbuntu import queue: https://translations.launchpad.net/ubuntu/+imports17:50
danilosCurrent language pack tarball schedule: http://dev.launchpad.net/Translations/LanguagePackSchedule17:50
danilosLanguage pack tarballs: https://translations.launchpad.net/ubuntu/karmic/+language-packs17:50
danilosLaunchpad documentation: https://help.launchpad.net/Translations17:50
danilosand back to...17:50
danilos= Q & A =17:50
pittifran_dieguez_| and related: QUESTION: if a newbie translator do work at launchpad and the original translator of that app makes work too outside of launchpad , how launchpad handles the collissions?17:50
pittidanilos: ^ ?17:50
danilosyeah, let me take that17:51
danilosso, Launchpad has a "smart" algorithm for deciding what takes precedence17:51
danilosif Launchpad imports an upstream translation, it updates it with every change coming from upstream17:52
danilosLaunchpad basically "tracks" the upstream translation17:52
danilosHowever, if someone modified that translation in Launchpad *on purpose*, we keep it, and mark the newly imported upstream one as "needing review"17:52
danilosIf someone did a translation in Launchpad which didn't exist upstream, but is later introduced there, we give preference to upstream translation17:53
danilosbasically (re QUESTION), the rule is: only if it was modified on purpose in Launchpad, it takes preference; otherwise upstream translation takes precedence17:54
danilosI'd like to go back to other earlier question now:17:54
danilosQUESTION: What about projects that have their upstream on Launchpad?17:54
danilosProjects like these do not have to worry about any integration because everything happens in Launchpad; if they ship translations in Ubuntu, they might be for a different release so that might take manual merge effort for now17:55
danilosQUESTION: is there a page in launchpad where I can see all untranslated strings for a specific language so I can just start translating ? or do I have to choose a source package first ?17:56
danilosThere is no such page in Launchpad, though you will get a list of recommendations of what could use some help in translating on your personal page with our 3.0 release coming in ~3 weeks17:57
danilosNote that Launchpad is not only about Ubuntu, though Ubuntu is the big part of it17:57
danilosThere *is* such a page for Ubuntu, eg. look at17:57
daniloshttps://translations.launchpad.net/ubuntu/karmic/+lang/sr17:58
danilosit's a long list, though :)17:58
pittiok, time for one more q17:58
pittiah, no, sorry17:59
pittithanks all for your attention!17:59
pittimore questions -> #chat, please17:59
danilosthanks all, sorry for taking longer than expected :)17:59
dpmthanks you all for cming along17:59
dpm(and sorry for the spelling)17:59
pitti*drumroll* liw!18:00
liwka-ching! it's time!18:00
liwThis is a tutorial on the "Getting Things Done" system.18:01
liwImpatient summary: externalize memory, review external memory regularly, pick the next possible thing to do and do just that.18:01
liwI will now spend the rest of this hour expanding on this.18:01
liw"Getting Things Done" is described in the book by the same name, written by David Allen.18:01
liwIt is often shortened GTD, and that's what I'll be using.18:01
liwI've been using various parts of GTD since the summer of 2006.18:01
liwI am by no means an expert, but we can learn together.18:01
liwas usual, if you have questions, write them to #ubuntu-classroom-chat18:02
liwI will attempt to monitor that channel, too18:02
liwquestions are OK at any time18:02
liwGTD is a system for personal productivity: for achieving things while avoiding stress.18:02
liwIt's a system for keeping track of everything you need to do, so you can concentrate on the task at hand, without your subconscious distracting you with all the other things you might be doing at the same time.18:02
liwAlternatively, it lets you decide to not do anything, since you know there is nothing you need to do right now.18:02
liw(and that's important!)18:02
liwThe goal of GTD is to get into a state where you know at any point all the things you could do next, and where you can easily deal with new inputs.18:02
liwGTD is divided into five phases: capture, process, organize, do, review.18:02
liwam I going too fast?18:03
liwDuring capture, you write down everything you need to remember.18:03
liwIt is all about making notes for later processing, not at all about processing things immediately.18:03
liwIf you are cooking and run out of milk, you write down that you need to buy more milk.18:03
liwIf you're out walking and see an advertisment with a URL you want to check out later, you write down the URL.18:03
liwOr you take a photograph of the ad; any note-taking method is fine, except trying to keep it in your brain.18:03
liwIf someone says something in a meeting that you need to deal with afterwards, you write it down (unless you're recording the meeting).18:03
liwIt's important to write things down as you think of them, or encounter them.18:03
liwSince the brain remembers things mainly by association, it's hard for it to remember random things unless you're reminded of them again.18:04
liwNot impossible, just hard.18:04
liwBecause of this, you should have note-taking equipment with you everywhere.18:04
liwA notebook and pen in your backpack, for example.18:04
liwAnd in your kitchen.18:04
liwMaybe in your bathroom.18:04
liwIf you want to go extreme, there are notebooks for underwater you use in the shower.18:04
liw(I am not that extreme. Honestly.)18:04
liwI use a notebook in my backpack, plus my mobile phone, plus a text file on my laptop.18:04
liwWhen you've written something down, it should go in your inbox.18:04
liwAn inbox might be physical or electronic, and you might have many of them.18:05
liwMy notebook and mobile phones are considered inboxes.18:05
liwI have a single physical inbox for things like snail mail.18:05
liwI have lots of electronic inboxes: e-mail, RSS feeds, my home directories on various hosts, etc.18:05
liwthe phone's sms messages are also an inbox, btw18:05
liwThe point of the inboxes is that there is a limited number of places where to look in the process phase.18:05
liwthat means it's easier to find all the things you write down18:05
liwany questions so far?18:06
liwthen I'll continue with the processing phase18:07
liwIn the process phase, you go through everything in the inboxes, and decide what to do about them.18:07
liwThe algorithm is basically this: http://paste.ubuntu.com/263929/18:07
liwFor each item in the inboxes, you decide whether you need to act on it at all, or whether it can be thrown away, or filed away where you'll find it when you do need it.18:07
liwIf it does need action, can it be done immediately, in less than two minutes? Then do it at once.18:07
liwOtherwise, can you delegate it to someone else?18:07
liwWhen you've decided the fate of the item, you're either done, or you need to write down what needs to be done by your or someone else.18:07
liwThis involves two lists: one for next actions for you, and one for things you're waiting for someone else to do.18:07
liwany questions? is anyone keeping up?18:08
liwok, let's continue on the organize phase18:09
liw<ia> QUESTION: what do you think about such special apps and services, like tasque, tomboy, gtg, remeberthemilk? do you use it and do they help you?18:10
liwI have used a few a little bit, but for me, I find that simple tools are the most versatile and least in my way; however, everyeone needs to find the tools that fit them the best18:10
liwso, about organizing stuff...18:10
liwYou need a place for everything, and you need to keep things more or less in their place.18:11
liwOtherwise you waste a lot of time finding things.18:11
liwThe GTD system suggests several ways to organize things.18:11
liwAt the core there are four lists: next actions for you to do, projects you are committed to, things you are waiting for someone else to do, and things you might do someday.18:11
liw(in short: next.txt, projects.txt, waiting.txt, and someday.txt for me)18:11
liwThe difference between a next action and a project is that a project is anything that takes more than one step, but an action is just one.18:11
liwI keep these things in plain text files, other people prefer more sophisticated applications.18:11
liwI found sophisticated apps to be too limiting.18:11
liwYou need a calendar for things that need to happen at specific times.18:11
liwYou should only keep those things in there, and other notes and stuff elsewhere.18:11
liwI use Evolution's calendar.18:12
liwother people like google's calendar, or a paper calendar, or other solutions; again, whatever works for you is good18:12
liwYou need a filing system. I have two: one for paper, one for bits.18:12
liwI use manilla folders for paper, and ~/Archive/ for bits.18:12
liw(actually, I have ~/Arkisto, which is Finnish for archive)18:12
liwBoth have a folder for each topic. A new folder is very cheap, so I keep the highly specific and name them descriptively. This makes it easy to find things quickly.18:13
liwI also have a "Read and review" system, or several, for texts that don't require doing, but require reading.18:13
liwI have a shelf in my bookcase for unread books.18:13
liwI have a folder in my browser for bookmarks I haven't read yet.18:13
liwI have a ~/Read_and_review folder for downloaded files such as PDFs I need to read.18:13
liwthat is a summary of my organizational system; any questions?18:13
liwno? in that case I'll continue on, to the "do" phase18:15
liwthis is the best phase of all, this is where _useful_ stuff happens, all the rest exists only to make this phase be as good as possible18:15
liwDoing is simple. You look at your list of next actions, and pick whatever seems best to do next, and then you do it.18:15
liwGTD has no priorities: it trusts you to pick the best action at any one time.18:15
liwGTD does have contexts, but I'm going to skip those, in the interest of brevity. I can come back to them at the end if there's time (do ask).18:16
liwIf your GTD system is kept up to date, you and your subconscious both trust it has everything important in it, and so you'll be able to concentrate on the chosen task and not have to worry about everything else.18:16
liwit's a bit contradictory, but since doing is so simple, there's really not much to say about it, even though it's the most important part of GTD18:17
liwso, unless there's questions, I'll continue to review18:17
liwA car needs an oil change and other attention from time to time.18:17
liwA GTD system needs regular review.18:18
liwDuring a review you make sure all your inboxes get emptied, that your lists are up to date, and that anything lingering in your brain gets dumped into the external system.18:18
liwyou might also spend time during the review to empty all pockets in all your trousers, jackets, backpacks, and so on18:18
liwWhile you review the list of next actions, you remove anything that is already done, or that no longer needs doing, and make sure that everything that remains really is just a single, physical next action.18:18
liwLikewise, for the projects list. Make sure every project has at least one next action. Projects that don't have a next action can be removed from the list, although perhaps only temporarily.18:18
liwfor most people, a weekly review seems to be a good idea; some people like monday mornings, to start off the work week with a clear picture of how things are18:19
liwothers like Friday afternoon, to end it with a clear picture18:19
liwothers like random times18:19
liwanything that works for you is good :)18:19
liwok, that covers the very basics of the GTD system18:19
liwnow does anyone have any questions?18:20
liwhas anyone listening to this used GTD or some other productivity system?18:20
liwok, a few people have :)18:22
liwthe system I use is not a pure GTD system, but it's fairly closde18:22
liwone thing I've added is that in addition to a calendar I use a couple of other things to remind me of time-based things18:23
liwone is cron: I have my crontab e-mail me things that I need to do regularly18:23
liwthe other is a nagger application that doesn't just remind me, it nags at me every morning until I tell it I've done it, and then it shuts up for a while until it's time to do the recurring thing again18:24
liwoccasionally I also use at, but that's rare18:24
liwI wrote the nagger for myself, but 'bzr get http://code.liw.fi/nagger/bzr/trunk' should get you a copy, if you want to play with it; freshmeat is probably full of similar tools though18:25
liwthose of you who have used productivity systems: what's your best tip? what's the worst thing you can warn people to avoid?18:26
liw<cyphermox> liw, i guess it's the often wild inbox-todo-list-of-doom18:28
liwthat is a very good point, and applies especially to e-mail handling18:28
liwI'll explain briefly how I manage e-mail18:28
liwall my e-mail comes to one inbox (in Evolution); I do not use per-mailing-list folders (even smart folders, since they broke for me)18:28
liwall incoming e-mail also gets automatically copied to an archive folder18:29
liwwhen I process e-mail in the inbox, if it does not require any action, I just delete it18:29
liwif I ever need to go back to it, to check something, I find it in the archive folder18:29
liwif I need to save an e-mail because it does need some action, I move it manually to a "pending & support" folder, and add the action to my next actions list18:30
liwthus, only e-mail that is unread or unprocessed stays in the inbox18:30
liwthe goal is to empty the inbox completely every day (not necessary every time I read e-mail)18:30
liwI don't always reach the goal, but I rarely have more than a few e-mails that linger in the inbox; sometimes there are discussions that are just hard to read (difficult technical content, tough emotional content, or something)18:31
liw<qwebirc91065> IMHO when you start keep your tools simple and you would probably have more succes commiting to the system18:31
liwthat's also a good point, I feel similarly; however, some people get more energy from nifty technical toys, and more power to them18:32
liwA word about next actions and their list.18:33
liwAn action should be a concrete physical action that can be done immediately, if you are in the right context.18:33
liwIt should not require something else to be done first.18:33
liwIt should be doable in one sitting, ideally in less than fifteen minutes, but that varies a lot, depending on the task and your familiarity with it.18:33
liwFor example, "write weekly activity report and send it to boss" is a good next action.18:33
liwIt is very concrete, does not depend on anything else, and doable quickly.18:33
liwOn the other hand, "save the whales" is a bad next action.18:33
liwIt is unclear what the actual action is.18:34
liw(if you really meant, "drag the whales from the beach back into the sea", you should write that instead)18:34
liwIt might work as a project, but even then it should probably be expanded with some description of what it means for whales to have been saved: what the success criteria for the project are.18:34
liw"Make a new Ubuntu derivative for jugglers" is also a bad next action.18:35
liwIt seems very concrete, but it's too long a task.18:35
liwIt might be a project, and the first action for the project might be "write list of six reasons why jugglers need their own distro".18:35
liwalso, a couple of links18:35
liwhttp://en.wikipedia.org/wiki/Getting_Things_Done is the wikipedia page on the GTD book18:35
liwif you're serious about trying out GTD, borrow or buy the book, it's a pretty quick read, and not too badly written18:36
liwhttp://www.43folders.com/ is a website/blog about productivity stuff; the early archives are full of all sorts of tips and tricks and ideas, which may be inspiring18:36
liw(though, after a few years the reader might get as tired of them as the author, but the archives are great)18:37
liwQUESTION: With all those pdf, articles, blogs... ¿do you know a centralized system to organize all that kind of information and be able to easily find where did you read what?18:37
liwI don't have a system for that. I save stuff I may want to get back to to my link list (http://liw.fi/links/), and for the rest, I use my memory and/or a search engine ending with ogle18:38
liwok, that finished off all my prepared notes18:39
liwwe have 20 minutes for further questions18:39
liwthe silence is overwhelming :) no worries, I'll stick around until the end, in case anyone comes up with something18:42
liw QUESTION: estimating how long an action will take, and then recording how long it actually took is advocated by some time management people.  Do you see any value in doing this?18:42
liwI don't do that, but if it's easy for you to do, it can be reasonable to do at least some of the time, so you know what the correction factor is between your estimates and reality18:43
liw(I have a correction factor of about 10 at times...)18:43
liwmore sophisticated systems than plain text files would make this easier to do, I'm sure18:43
liwhm, I skipped an explanation of contexts earlier, I could do that now18:44
liwa "context" in the context of the next actions list, is some kind of constraint on the task, such as the availability of a phone18:44
liwor availability of the Internet, or some particular person, or being in a physical location, or whatever18:45
liwif a next actions list is shortish, say less than 20 or 30 items, it doesn't need to be divided into sections, but longer lists typically do, and GTD suggests contexts for them18:45
liwso the list might have a section for things you need to do over the phone: setting up a doctor's appointment, or something18:46
liwthe exact list of suitable contexts depends on the life you lead18:46
liwthe GTD books is from 2000, so it is a bit quaint and suggests things like "at computer", as if people didn't spend 16+ hours at their computers18:47
liwmy contexts are: errand (stuff I need to leave my home for), phone, online banking (it is an effort to log in securely, so I try to do everything with one login), work time at computer, free time at computer, at home not using a computer, and availability of a car (I share a car with two friends)18:48
liwonce again, any set of contexts that works for you is good18:48
liwQUESTION: Could you elaborate a bit more about why you prefer simple text lists over more specialized applications for GTD?  What didn't you like about applications?18:52
liw<ScottTesterman> liw: It seems as though you use a huge variety of tools to manage everything.  Have you considered consolidating everything, or at least as much as possible, into one central application?18:53
liwthese two questions are related, I think18:53
liwfor a while I had everything in one system, then I wrote my own custom app and moved everything into that system18:53
liwthe problem was, one app wasn't flexible enough for me18:53
liwbut that's me, I'm not saying they aren't good for others18:54
liwfor example, a centralized app might take a lot of work to change the list of contexts, or be resistant to adding a new category of list18:54
liwor the app might be a web app, which I just find awkward to use18:55
liwalso, I am an old-fashioned luddite18:55
liwanything else? we are about to run out of time18:56
liwjames_w, please have the podium19:00
james_wthanks liw19:00
james_whi everyone19:00
james_wI'm going to be talking about fixing an Ubuntu bug using bzr19:00
james_wwho's here to learn about that?19:01
james_wexcellent19:01
james_wso, first things first, install the "bzr-builddeb" package if you don't have it installed yet19:02
james_wwe'll need it in a little while19:02
james_wif you head on over to https://launchpad.net/ubuntu19:03
james_wyou'll see you are now able to click on the "Code" tab at the top19:03
james_wwhich wasn't something you could do until recently19:03
james_wwhat does that tab show you?19:04
james_wit shows you bzr branches for every package in Ubuntu19:04
james_wyou can now get the source of (nearly) every package as a bzr branch19:05
james_wthis means you can more easily look at the history of the package19:05
james_wmore easily version control your changes19:05
james_wand more easily merge changes from others19:05
james_wI think this is wicked cool19:05
james_wqense> QUESTION: How do the branches relate to the apt-get source command?19:06
james_wgood question19:07
james_wbranching lp:ubuntu/<packagename> will get you the same as "apt get source <packagename>" (if you have karmic deb-src lines in your sources.list)19:07
james_wit just gets it as a bzr branch rather than a tarball19:07
james_wwe keep the branches up to date with changes in the archive19:08
james_wso that when there is a new upload it appears there very quickly19:08
james_we.g. Chuck uploaded net-snmp 43 minutes ago, and the change was available in bzr 5 minutes later19:09
james_w<AntoineLeclair> QUESTION: same as mruiz: are all ubuntu packages there ?19:09
james_walmost19:09
james_wthe intent is to have them all there19:09
james_wwe are still working on getting the last 10% there19:09
james_wso, you don't have to use that long list of branches to navigate19:10
james_wif you look at https://launchpad.net/ubuntu/+source/net-snmp19:11
james_wwhich is the package page for net-snmp that I just mentioned19:11
james_wyou will see that the "Code" tab is again active19:11
james_wclicking on that gives this page:  https://code.launchpad.net/ubuntu/+source/net-snmp19:11
james_wwhich is an overview of the branches available19:11
james_weach branch is attached to a release of Ubuntu19:12
james_wso you can see the karmic branches separate from the jaunty ones19:12
james_wso at the top is lp:ubuntu/net-snmp19:12
james_wwhich can also be written lp:ubuntu/karmic/net-snmp19:12
james_womitting the release gets you the current development one19:12
james_wunder that is lp:ubuntu/jaunty/net-snmp which is obvious the jaunty branch19:13
james_wthen there is intrepid, which is a bit more interesting19:13
james_wlp:ubuntu/intrepid/net-snmp19:14
james_wthat's the source that was released with intrepid19:14
james_wthen lp:ubuntu/intrepid-security/net-snmp19:14
james_wwhich is the source that is in intrepid-security19:14
james_wso it contains one or more security updates19:14
james_w<qense> QUESTION: What if you want to get the latest version in e.g. jaunty, but don't know if it's been published in backports, security and/or updates?19:15
james_wgood question19:15
james_wthere's no good answer for that currently19:15
james_wit's partly that "latest" isn't exactly well defined19:15
james_wI'm keen to provide that somehow19:15
james_wbut it may be implemented on top of what we have using the LP API or something19:16
james_wso, that's the branches that are available, what do they contain?19:16
james_wcheck out https://code.launchpad.net/~ubuntu-branches/ubuntu/karmic/net-snmp/karmic19:16
james_wwhich is the page that corresponds to the karmic branch19:16
james_wgives you some information on the branch, the latest revisions, and the bugs that have been fixed19:17
james_wit also allows you to subscribe to the branch19:17
james_wthis would allow you to get an email every time there was an upload of a package19:17
james_wwhich I don't think you can currently do without some procmail/rss2email type solution19:18
james_wif you click on the "Source Code" link then you can see the contents of the branch19:19
james_whttps://bazaar.launchpad.net/~ubuntu-branches/ubuntu/karmic/net-snmp/karmic/changes19:19
james_wand https://bazaar.launchpad.net/~ubuntu-branches/ubuntu/karmic/net-snmp/karmic/files19:20
james_wso you can see that all the source is there as you would expect19:20
james_wand you can also see the revision corresponding to each upload19:20
james_w<jacob> QUESTION: will it eventually be possible, with the correct upload rights, to push to one of these branches and have a package built & uploaded out of it? (or does this already happen? :) )19:20
james_wyes and yes19:20
james_wthat is currently in planning19:20
james_wyou will be able to push soon if you can upload19:21
james_wand then you will be able to request a build from the branch19:21
james_w(which will work from any packaging branch to PPAs as well)19:21
james_w<mruiz> QUESTION: how are the default upload rights per branch ?19:21
james_wthis is still being discussed19:21
james_wone rule will be that if you can upload the package then you will be able to push to these "official branches"19:22
james_wI should have mentioned that the lp:ubuntu/net-snmp etc. branches are special19:22
james_wthey have been nominated to be "official" and correspond to what is in the archive19:22
james_wyou can push any branch you like to ~LP-ID/ubuntu/karmic/net-snmp/some-name19:22
james_wif you want to work on this package19:23
james_wwhich will work well for PPAs at some point19:23
james_win addition to all of this check out https://code.launchpad.net/debian19:24
james_wwe have exactly the same thing there for Debian19:24
james_wso if you see an upload in Debian with a change you want in Ubuntu then you can merge the Debian branch from there to the Ubuntu one19:25
james_w<mruiz> QUESTION: are they imported from git.debian.org ?19:25
james_wno19:25
james_wnot every package is on there19:25
james_wwe would like to do that when it makes sense19:25
james_wbut we need some improvements in bzr first19:26
james_wso we are working on that19:26
james_wso, what else can you do with these branches?19:26
james_wwell, I hope you can use them to fix bugs19:26
james_wotherwise I picked a bad title for this session19:27
james_wso, I recorded a screencast that shows some of this19:27
james_wunfortunately it has no audio, but it might help follow along or jog your memory19:27
james_whttp://people.canonical.com/~jamesw/dd.ogv19:27
james_w<^arky^> QUESTION: Is it possible to checkout the source of package, apply custom patches and publish to personal PPA for testing19:27
james_wyes, that will be possible one day19:28
james_wyou can do the first part now19:28
james_wand you can upload the result to your PPA as normal with dput19:28
james_wthe branch -> PPA step will be a future addition19:28
james_w<mruiz> QUESTION: Who control Ubuntu Branches team?19:28
james_w<evil laugh>19:28
james_wI do19:28
james_wit's kind of an implementation detail19:29
james_wfor all these branches there isn't really an owner, but we can't have no owner, so we just made a new team19:29
james_w<qense> Not completely ontopic: I'd like to propose an update for the guake package with help of the branch system, but the diff comes from Git. How do I convert it to a usable patch I can add to the branch?19:29
james_wcheck out "bzr patch" from bzrtools19:29
james_wshould be able to apply git diffs19:29
james_w<jacob> QUESTION: will bzr-builddeb be used on the launchpad side for building?19:31
james_wdunno19:31
james_wor a more precise answer:19:31
james_wyes, but no19:31
james_wthere will be code reuse19:31
james_wbut we might want to reduce the amount of trusted code19:32
james_wand it won't need all the features of bzr-builddeb19:32
james_wsorry, just checking the cricket score19:35
james_wright, so let's fix a "bug"19:35
james_wwe can carry on working on this net-snmp package19:35
james_woh, staging is down19:36
james_wthat will make this tricky19:36
james_wwe don't really want to create lots of useless merge proposals19:36
james_whow about I commentate on the video instead?19:36
james_wwould that work?19:36
james_wnot good for the logs though :-/19:37
james_wwe can at least grab a branch and look around, so let's do that19:38
james_wbzr branch lp:ubuntu/net-snmp19:39
james_wthat will create a "net-snmp" directory that contains the bzr branch19:39
james_w<mruiz> error- > bzr: ERROR: exceptions.KeyError: 'Bazaar repository format 2a (needs bzr 1.16 or later)\n19:42
james_wso, what's going on here?19:42
james_wbzr is just about to release 2.0 with a new default format19:42
james_wthis format is a lot better than it's previous ones in many ways19:43
james_wmost notably here in disk space19:43
james_was there are a *lot* of branches here it would have used loads of disk space in the old format19:44
james_wso we used the new one a little before it is available to most people so that we could fit all these branches on a sensible number of disk drives19:45
james_wthis is unfortunate in that it makes it harder to use an old release to work on the branches19:45
james_wthere is https://launchpad.net/~bzr/+archive/ppa19:45
james_wand we will go through the backport process once 2.0 is out19:45
james_wplus, it's not long until karmic is released :-)19:46
james_wso, we have the branch now19:49
james_wyou can look around and see that it looks just like a normal package19:49
james_whow to build it?19:49
james_w"bzr builddeb -S"19:50
james_wthat will build a source package19:50
james_w"bzr builddeb" to build a binary one19:50
james_w"bzr bd"19:50
james_wyou can use that alias for less typing19:50
james_w<qense> QUESTION: Is there a mechanism for proposing something based on lp:ubuntu/foo/bar to become lp:ubuntu/foo-backports/bar ?19:50
james_wthat would be the normal backport process19:50
james_wbut no, we don't have anything nominations or anything for that19:51
james_wso, feel free to fix any bugs you find in this package :-)19:51
james_wif you do fix something then you can "bzr commit", or use "debcommit" after adding a changelog entry with "dch"19:52
james_wthen you should "bzr push" this to LP19:52
james_wto something like "bzr push lp:~LP-ID/ubuntu/karmic/net-snmp/fix-bug"19:52
james_wthen you can open that branch in your web browser and "Propose for merging in to another branch"19:54
james_wand that would create a "merge proposal" that allows us to review and comment on the changes19:54
james_wyou can see this in the screencast19:54
james_wwe're out of time, any last questions?19:54
james_wok, I'll make way for Laney19:57
james_wthanks everyone19:57
james_wI'm always up for discussing this, so grab me another time if you want to know more19:57
LaneyHi everyone19:59
Laneyjust getting sorted, let's start in a couple of minutes19:59
LaneyDo we have a questions channel? I've been out of it for a week20:00
Laneyyou can paste them in here20:02
AntoineLeclairgood20:02
LaneyAlright everyone, let's get started!20:02
LaneyWho's here? Say hi in #ubuntu-classroom-chat20:02
LaneyYay, looks healthy20:04
Laney(sorry if I go silent for a bit... connectivity problems)20:04
LaneySo... we're here to learn how to package from scratch20:04
Laneytake the upstream source tarball and end up with a .deb that users can install on their systems20:04
Laney...and if you persevere enough, install using apt20:05
LaneyLet's get started, as time is already ticking away20:05
LaneyEarlier in the week I perused the needs-packaging bugs that have been filed on Launchpad looking for something fun for us to work on in this session20:06
LaneyI've decided that we should package a little tool for working with PDF files called pdfchain.20:06
LaneyYou can read more about it here: http://pdfchain.sourceforge.net/20:06
LaneyThis is a nice and simple application to package, but one which has a couple of fun twists along the wya20:07
LaneySo, without further ado, let's download the tarball20:07
Laneyplease run:20:07
Laney  wget20:07
Laneyhttp://downloads.sourceforge.net/project/pdfchain/pdfchain-0.123/PDF%20Chain%20version%200.123/pdfchain-0.123.tar.gz20:07
Laney(on one line)20:07
AntoineLeclairshadeslayer: QUESTION:Who decides what to package?20:07
Laneyshadeslayer: Good question20:08
Laneyshadeslayer: Individuals do. We have a procedure for requesting packages on Launchpad, but nobody can force you to do the work20:08
Laneybasically if you want to package an application that nobody else is working on, go ahead and do it :)20:08
Laneyall got the tarball? We need to move it to the name that the packaging system expects20:09
Laneythe format is UPSTREAMNAME_VERSION.orig.tar.gz20:09
Laneyso please mv pdfchain-0.123.tar.gz pdfchain_0.123.orig.tar.gz20:10
Laneyand then unpack it: tar xzvf pdfchain_0.123.orig.tar.gz20:10
AntoineLeclairshadeslayer: QUESTION:if you package an app and it gets uploaded to ubuntu repos,do you have to mange it or does MOTU take care of it?20:10
Laneyshadeslayer: It will be team maintained in the usual case. Anyone can work on it but that can often mean nobody works on it, so it is expected that once you get a package uploaded you continue to care for it20:12
Laneythat means managing bugs and keeping track of upstream20:12
Laneywe don't want unmaintained packages in the archive20:12
Laneyhave we got the tarball unpacked?20:12
Laneyplease change into the directory20:12
Laneycd pdfchain-0.12320:12
Laneynow we need to make a directory to hold all of our packaging data20:13
Laneymkdir debian20:13
Laneythis is where all of the information used to build the package is going to go20:13
LaneyLet's make empty copies of some of the files we are going to work with20:14
LaneyI'll explain what these are as we go along20:14
Laneytouch debian/copyright debian/compat debian/control debian/rules20:14
Laney(there is a tool called dh_make to make templates for these files but we won't use it here)20:14
LaneyThe first file we'll work with is the changelog20:15
Laneythis is used by various pieces of archive software, and is the log of your package's history20:15
Laneydch --create --newversion 0.123-0ubuntu1 --package pdfchain --distribution karmic20:15
Laneyso please run:20:15
AntoineLeclairmac_v: <Question> any reason , why the template is not used?20:16
Laney"dch" is a tool for managing debian changelog files20:16
Laneymac_v: Partly for educational purposes, partly because I don't think it's really necessary20:16
Laneydh_make creates a lot of files we don't need here20:16
Laneypart of what I want to teach you is that packaging is quite easy20:17
Laneyback to dch -- with this command we've told it to create a new debian changelog file, with the version/package/distribution given20:17
AntoineLeclairfunkyHat: Question: why are we giving the version an 0ubuntu1 suffix?20:17
LaneyfunkyHat: coming to that )20:17
Laney:)20:17
LaneyA note on the version convention - 0.123 is the upstream version number, which I hope is obvious20:18
Laneythe - is a separator between the upstream and "debian" (/ubuntu) revision20:18
Laney0 is the revision of the package in Debian itself20:18
Laney0 as it hasn't been uploaded there (I hope)20:19
Laneyif we were packaging for Debian we would use the version 0.123-120:19
Laney"ubuntu1" means that this is the first revision of the package in Ubuntu20:19
Laneyso dch should have opened a text editor for you20:19
Laneyis that right?20:19
LaneySo now we need to make one small change to the file20:20
Laneywe need to ensure that when the package is uploaded, the bug that was filed to request the packaging is closed20:21
Laneyyou can see that bug here: https://bugs.launchpad.net/ubuntu/+bug/40798220:22
LaneySo please change the Closes: #xxxx to LP: #xxxx20:22
LaneyThis instructs the launchpad archive management software to set this bug to "fix released" when the package is uploaded20:22
Laneyplease save and quit the file now20:22
AntoineLeclairelopio: Question: if there was no open bug for the package, should we open one before?20:22
Laneyelopio: It's a good idea to prevent two people doing the same work20:23
Laneybut it's not mandatory20:23
LaneyOK the next file we're going to fill in is debian/compat20:23
Laneywe will be working with Debhelper version 7 so please:20:23
Laneyecho 7 > debian/compat20:23
AntoineLeclairScottTesterman: QUESTION: If the "Closes" stays, but "LP" is still added before the bug number, will Launchpad still close the bug, or does the word Closes throw it off?20:23
Laneythis instructs debhelper to use compatibilty level 720:23
Laneysee man debhelper for what the various choices are20:24
Laneyand for more information on what this means20:24
LaneyScottTesterman: It will probably break the parser, use LP: #40798220:24
LaneyOK that file was easy20:25
Laneyso now we'll move on to the rules file20:25
Laneythis is the file which describes how to build your package20:25
Laneyfor technical details see http://www.debian.org/doc/debian-policy/ch-source.html20:26
Laneyfor now, please:20:26
Laneycp /usr/share/doc/debhelper/examples/rules.tiny debian/rules20:26
Laneynow open this up in your favourite editor20:26
LaneySee how simple this is? :)20:27
LaneyNot so long ago such a short rules file wouldn't have been possible20:27
Laneybut the magical Joey Hess recently released Debhelper version 7 which allows us to use such short files20:27
Laneywe now only need to express situations in which the packaging differs from the default behaviour20:28
LaneyFor now we don't know what's going to differ so please quit your editor20:28
Laney(we will return to rules later when the package doesn't quite build as expected)20:29
Laneynow we'll move onto debian/control20:29
LaneyThis is a file which expresses a lot of important metadata about your package20:30
LaneyPlease visit http://pastebin.com/f59a78dd and copy the contents to debian/control20:30
LaneyI'll quickly explain what the fields mean20:30
Laney(speeding up, time is ticking away)20:30
LaneySource: name of the source package20:30
LaneySection, name of the archive section - allows users to navigate packages by category20:31
Laneyeg on http://packages.ubuntu.com20:31
AntoineLeclairmruiz: QUESTION: What is the default behaviour20:31
Laneymruiz: I don't understand, please clarify20:31
AntoineLeclairmruiz: QUESTION: What is the default behavior with debhelper 7 ?20:31
LaneyPriority: how important it is that the user installs the package20:32
Laneymruiz: I don't have time to explain, but basically ./configure && make && install (or the appropriate based on the build system in use)20:32
AntoineLeclairmruiz: QUESTION: What is the default behavior with debhelper 7 (because debian/rules seems to be black magic)? ;-)20:32
LaneyMaintainer: Who maintains the package, for us it's usually the development team20:33
LaneyXSBC-... - for packages created in Ubuntu first, the initial packager20:33
Laneyfor packages which come from Debian, the Debian maintainer20:33
LaneyBuild-Depends: packages which must be installed for this one to build20:33
LaneyStandards-Version: version of debian policy which this package conforms to20:34
LaneyHomepage: upstream homepage for software20:34
AntoineLeclairshadeslayer: QUESTION : How does one determine dependencies?20:34
Laneyshadeslayer: We'll come to this20:34
Laneyafter the blank line, the next lines refer to the *binary* package20:34
Laneywe are working with a source package currently; the binary package is what we build at the end20:35
Laney(.deb)20:35
Laneythere can be multiple binary stanzas20:35
LaneyPackage: name of the binary package20:35
LaneyArchitecture: CPU architectures for which this package works (can be - and usually is - 'all')20:35
LaneyDepends: packages which must be installed for this one to work20:36
LaneyDescription: self explanatory - displayed in various pieces of software20:36
Laneythere are other fields, but these are the ones we need here20:36
LaneySee http://www.debian.org/doc/debian-policy/ch-controlfields.html for more20:36
LaneyUsually I copy the control file from another package and edit it to suit20:37
Laneyso now please open debian/control in your editor20:37
Laneyto speed this up I've filled in most of the info20:38
Laneypaste these contents in http://pastebin.com/m5807400220:38
LaneyThe most important thing to figure out are the build dependencies20:39
Laneythe first thing we definitely need is debhelper20:39
Laneyas this is what we are using to build the package20:39
Laneyso please change line 6 to Build-Depends: debhelper (>= 7)20:39
Laneythis says that we need debhelper of at least version 7 installed to build20:39
AntoineLeclairmruiz: QUESTION: Why Ubuntu Developers as Maintainers? What about MOTU Developers ?20:40
Laneymruiz: in anticipation of the archive reorganisation when MOTU will be going away20:40
Laneyto figure out the rest of the build-deps, we would usually look in the README20:40
Laneyor INSTALL file, but for this software they are not so useful20:40
Laneyso we will open up configure.ac20:41
AntoineLeclairAlanBell: QUESION: is it important/desireable to use an @ubuntu.com email address?20:41
LaneyAlanBell: For the maintainer or original maintainer?20:41
Laneyconfigure.ac is used by the GNU autotools to build the configure script20:41
Laneypart of running ./configure is checking that the system has the necessary prerequisites installed20:42
Laneyit requres some skill to understand this file20:42
Laneybut what we can understand from it is that we need gtkmm-2.4 greater than or equal to 2.4 installed and intltool greater than or equal to 0.3520:43
Laneythis is one of the skills that you will develop when you maintain packages20:43
Laneyso, please add ", libgtkmm-2.4 (>= 2.8), intltool (>= 0.35.0)" to your build-dep line20:44
Laneysave and quit this file20:44
Laneyer, wait, please don't do that ;)20:44
Laneyreopen debian/control20:44
Laneywe need to sort out the dependencies for the binary package20:44
Laneythis is the Depends: line20:45
Laneythis should be Depends: ${shlibs:Depends}, ${misc:Depends}, pdftk20:45
Laneywhat this says is to insert the dependencies for the shared libraries (resolved by dh_shlibdeps - see man page for more)20:45
Laneyother parts of the build process can insert their own dependencies, which will be added to misc:Depends20:45
Laneythese are called substvars, short for substitution variables20:46
Laneyand pdftk is the application which pdfchain uses to transform pdfs, but won't be detected by shlibs because it is not a linked library20:46
Laneyit is called as a system binary20:46
Laney*now* you can save and quit20:46
Laneyinvoke debuild -S -us -uc to build the source package20:46
Laneycd ..20:47
Laneyls *.dsc20:47
Laneyyou should see the source package we just made20:47
Laneywhich you can build with pbuilder20:47
Laneypbuilder-karmic build *.dsc20:47
Laneypbuilder-disc karmic build *.dsc if you did not build your pbuilder with symlinks20:49
Laneyif you do not have pbuilder installed20:50
Laneycd pdfchain-0.12320:50
Laneysudo apt-get install libgtkmm-2.4-dev intltool20:50
Laney(and debhelper if you dont have this)20:50
Laneyfakeroot debian/rules binary20:50
LaneyWe're rapidly running out of time, so I'm going to speed this up a lot20:51
Laneythe build will fail in the documentation step20:51
Laneytest step, sorry20:51
Laneythis is because the upstream make check rule is broken20:51
Laneythis should be reported as a bug to upstream - someone please feel free to do this20:52
Laneywe are going to disable the test for now20:52
LaneyMake your debian/rules look like: http://pastebin.com/f4d33934720:53
Laneythis says to run the following commands instead of dh_auto_test, which is the debhelper command that runs the tests20:53
Laneythe following commands are nothing ;)20:53
Laneyoverrides were a feature introduced in debhelper version 7.0.50, so we need to change ">= 7 to >= 7.0.50" in the build-deps line20:54
Laneynow the package will build successfully :)20:54
LaneyHowever, there is still an upstream bug where the documentation is placed in /usr/doc instead of /usr/share/doc20:55
AntoineLeclairrandomaction: shouldn't we use libgtkmm-2.4-dev for build-depnds?20:55
Laneyrandomaction: yes20:55
Laneythat's what I meant, sorry20:55
LaneySee http://pastebin.com/f5a2622fe20:55
Laneydh_install is the debhelper command which deals with installing files into packages20:56
Laneywe will patch this rule to move the documentation to the right place20:56
Laneyhttp://pastebin.com/f547f459820:56
Laneythis says to move the files from debian/pdfchain/usr/doc to debian/pdfchain/usr/share/doc20:56
Laneywhich is the correct location for them20:57
Laneydebian/pdfchain is where the files are built to before being placed into your .deb file20:57
LaneyOK we're pretty much out of time so I'm going to give oyu links to read the stuff I didn't get to20:57
Laneysorry for having to go so fast, I hope you managed to get something20:57
LaneyWe still need to:20:58
Laney  - Fill out a package description. See http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Description for more on this20:58
Laney  - Fill out the debian/copyright file. See http://www.debian.org/doc/debian-policy/ch-docs.html#s-copyrightfile and http://dep.debian.net/deps/dep5/20:59
LaneyFor reference, http://pastebin.com/f75b86ac8 is the file I came up with20:59
Laneyand you can get the final version of the pdfchain package from my PPA at https://edge.launchpad.net/~laney/+archive/ppa21:00
LaneyPlease ask any questions you have on this in #ubuntu-motu, and sorry again for having to rush21:00
Laneyas you can see, there is a lot to know when packaging from scratch :)21:00
LaneyNow I'll hand over to noodles775, cprov and wgrant who are going to talk to you about hacking soyuz21:00
Laneytake it away lads21:01
noodles775Thanks Laney !21:01
cprovLaney: thanks.21:01
noodles775My name's Michael Nelson and I've been working on Launchpad and Soyuz for around 9 months now.21:01
noodles775Here's an overview of what's coming up over the next 40mins or so:21:01
noodles7751. Grill a new soyuz hacker with questions.21:02
noodles7752. A guided tour through the Soyuz code-base21:02
noodles7753. Setting up a Soyuz test scenari21:02
noodles775o21:02
noodles775So - up first is our chance to grill the latest Soyuz hacker: wgrant! Since the open-sourcing of Soyuz with Launchpad, wgrant has - in his own time - pushed 20 (!) launchpad branches.21:02
noodles7757 of these are soyuz-related branches (afaics).21:03
noodles775wgrant: wanna introduce yourself?21:03
wgrantI didn't think I'd done quite that many, but OK!21:03
wgrantSo, I've been an Ubuntu developer for a few years now.21:03
noodles775(that's how many I'd counted that have been pushed - not necessarily merged :) ).21:03
wgrantAnd at some point became interested in the infrastructure behind it all.21:04
noodles775Cool!21:04
noodles775So this is our chance to find out how William got started working on Launchpad and Soyuz, what the issues were, and what he'd recommend to others who want to hack on Soyuz.21:04
wgrantSo when it was sneakily open-sourced a month ago, I jumped straight in.21:04
wgrantThere are lots of bits and pieces I'd like to see fixed or improved, so it was really great to see the source releaed.21:05
wgrantHacking Soyuz (and Launchpad in general) is probably going to be a little intimidating at first.21:05
wgrantBut Launchpad developers are very helpful to new contributors, so they can give you a lot of guidance if you get lost.21:05
noodles775BTW everyone: please have think up some good questions that will help you get started and post them in #ubuntu-classroom-chat21:06
wgrantTo get oriented for development, I'd start off by setting up a local development environment (https://dev.launchpad.net/Getting).21:06
wgrantThen have a look at how the codebase is organised. Maybe poke around in the model a bit with 'make harness'.21:06
wgrantSee how things work using the SoyuzTestPublisher, which I believe noodles775 will explain later.21:07
wgrantOnce you've found your way around a bit, identify a little bug or feature on which you want to work.21:07
wgrantThe next step is to ask a Launchpad developer (in #launchpad-dev) about it. They'll advise you whether you're attempting the impossible, or otherwise tell you where to start.21:08
wgrantThat bit is quite important, as it can stop you from hitting dead-ends or attempting something that's just too difficult for a first-time hacker (as quite a few things are).21:08
noodles775cprov: have you (or anyone else) ever tried to explain what soyuz does by analogy?21:11
wgrantAn analogy... a good question. It's a pretty complex creature, so I'm not sure where to start.21:11
noodles775I've sometimes tried to think of what soyuz does as a blogging engine... something familiar, with some similarities...21:12
noodles775But there are quite a few differences too.21:13
noodles775OK, any other questions for wgrant ?21:13
cprovwell, Soyuz encompasses a lot of subcomponents that takes debian source packages as input and produces debian repositories, but there is a lot of details in the middle.21:13
noodles775Which is a great lead-in to 2. A guided tour through the Soyuz code-base - take it away cprov :)21:13
cprovHi, my name is Celso Providelo and I've been working on Soyuz for the last 5 years (!)21:14
cprovso, I would like to point you to some piece of documentation I've created to guide users to the Soyuz code base.21:15
cprovhttps://wiki.ubuntu.com/CelsoProvidelo/SoyuzInfrastructureOverview21:15
cprovit has a descent (but not pretty) diagram, it illustrate what I mean by 'lots of details in the middle' before.21:16
cprovSoyuz is in reality a set of integrated tools/components for 'controlling' software packages.21:17
cprovIt starts with the 'upload server', an FTP daemon that receives source packages uploaded by users using `dput/dupload`.21:19
cprovSources are them passed to the 'upload processor' which verifies their consistency (packaging metadata) and stores its information in the Launchpad database.21:20
cprovthe publication of the source automatically creates a build request, which is dealt by the 'build dispatching' component.21:21
cprovit pass the source to a 'builder', an isolated environment for running `debuild`.21:22
cprovBinaries resulted from the build process come back to the upload processor and are checked before getting stored in Launchpad.21:23
cprovQUESTION: c_korn: cprov: those are the builders ? https://launchpad.net/builders21:23
cprovc_korn: exactly, those are the current build machines.21:24
cprovIn the wiki page I've mentioned above, there are pointers to the corresponding modules for each part of the systems21:24
cprovknowing the topology described in that diagram and where to look in the codebase will help you to find out what need has to be changed.21:26
cprovThat document is very short on details, but I expect them to be added as long as we get more community contributors. Don't hesitate in adding questions or suggestion directly to it.21:28
cprovnoodles775: the stage is yours, I guess.21:28
noodles775cprov: I had a few questions myself...21:28
noodles775<noodles775> QUESTION: What's an example of a inconsistency that the upload processor will find and reject?21:29
cprovnoodles775: basically anything that doesn't pass a `lintian` check.21:29
noodles775ah ok, so it's really just to check for things that people should do themselves before uploading.21:30
cprovexactly21:30
noodles775OK, on to: 3. Setting up a Soyuz test scenario21:30
cprovthe upload processor also checks consistency against the packages previously uploaded21:30
noodles775When hacking on Launchpad’s soyuz application – and creating tests to verify that your new functionality works, you’ll often need sources or binaries published in very specific scenarios.21:31
noodles775We're going to use a special test feature - the SoyuzTestPublisher - to publish sources and binaries to a PPA in our development environment - and watch the status' update live in the browser.21:31
noodles775The SoyuzTestPublisher – as the name suggests – was created for this exact reason (by cprov) :)21:32
noodles775So for this hands-on - you don't need any previous LP development experience... but you do need a Launchpad development setup.21:32
noodles775If you've set up the Launchpad development environment properly according to http://dev.launchpad.net/Getting, you should be able to run the following command:21:33
noodles775$ rocketfuel-branch soyuz-test-scenario21:33
noodles775While that's going - can I get an idea of how many (if any) people are following along?21:34
noodles775Great! As long as there's at least one person, it's worth doing :)21:35
noodles775When that's finished, change into the soyuz-test-scenario directory.21:35
noodles775We will be watching the new publications at:21:35
noodles775https://launchpad.dev/~cprov/+archive/ppa21:35
noodles775This page updates the build status column every 60 seconds by default, so instead of tapping your fingers while you wait I'd recommend specifying an update interval of 5 seconds for the dynamic updates21:36
noodles775as shown in the patch: http://pastebin.ubuntu.com/264831/21:36
noodles775You can apply that patch to your current branch with:21:36
noodles775$ wget http://pastebin.ubuntu.com/264831/plain/ -O update_every_five.diff21:36
noodles775$ bzr patch update_every_five.diff21:36
noodles775Just let me know if I go too fast...21:37
noodles775With that patch applied, run 'make run' in your branch directory in one terminal and 'make harness' to get a python console in another.21:37
noodles775Now, using the python console, we'll first just grab a sample-data user who has a PPA.21:38
noodles775>>> cprov = getUtility(IPersonSet).getByName('cprov')21:38
noodles775A few imports that we need21:38
noodles775>>> from lp.soyuz.tests.test_publishing import SoyuzTestPublisher21:39
noodles775>>> from lp.soyuz.interfaces.publishing import PackagePublishingStatus21:39
noodles775and then we create our Soyuz test publisher instance:21:40
noodles775>>> publisher = SoyuzTestPublisher()21:41
noodles775Next, we just to ensure that the publisher has default distroseries etc. setup:21:41
noodles775>>> publisher.prepareBreezyAutotest()21:42
noodles775And now for the fun, we'll create a new published source package:21:42
noodles775>>> testsrc = publisher.getPubSource(sourcename='testsrc', archive=cprov.archive, status=PackagePublishingStatus.PUBLISHED)21:42
noodles775Finally, we'll create the missing builds for this new source package, and commit it all to the db:21:43
noodles775>>> builds = testsrc.createMissingBuilds()21:43
noodles775>>> import transaction;transaction.commit()21:43
noodles775Now open a browser at https://launchpad.dev/~cprov/+archive/ppa (or re-load) and you'll see the new 'testsrc' package with its pending builds.21:43
noodles775We'll now update the build manually watching the status update itself in the browser window.21:44
noodles775>>> from lp.soyuz.interfaces.build import BuildStatus21:44
noodles775>>> build = builds[0]21:44
noodles775>>> build.buildstate = BuildStatus.BUILDING21:44
noodles775Just watch your browser window without refreshing... after you commit the transaction, you'll see the build status for your package update within 5 seconds:21:44
noodles775>>> transaction.commit()21:44
noodles775Did it work?21:45
noodles775Now we update it to fully-built:21:46
noodles775>>> build.buildstate = BuildStatus.FULLYBUILT21:46
noodles775>>> transaction.commit()21:47
noodles775Now we've got a successful build, but its binary has not been published,21:48
noodles775Mouse-over the build icon to see a description of the current state.21:48
noodles775So we'll fake the successful publication of the binary with the SoyuzTestPublisher...21:49
noodles775>>> binary_pkg_release = publisher.uploadBinaryForBuild(build, 'testbin')21:49
noodles775>>> binary_pub = publisher.publishBinaryInArchive(binary_pkg_release, cprov.archive, status=PackagePublishingStatus.PUBLISHED)21:49
noodles775Again, be ready to watch it update:21:49
noodles775>>> transaction.commit()21:49
noodles775There you go! A brief intro to the SoyuzTestPublisher for testing soyuz publications.21:50
noodles775I've created a screencast and paste of the script at:21:50
noodles775http://micknelson.wordpress.com/2009/09/04/testing-launchpad-soyuz-features/21:50
noodles775So, that's all we had... does anyone have any questions?21:51
noodles775I guess not :) Well, hope it was useful! Remember, if you've got any questions later, you can always ask them on #launchpad-dev.21:53
noodles775jcastro: ?21:56
noodles775<c_korn> some final words to end the Ubuntu Developer Week ?21:56
jcastronot really21:59
jcastrosee you guys next cycle? :)21:59
jcastro\o/21:59
noodles775:)21:59
jcastrowe'll have an open week coming up soon so there will be more tutorials, etc.22:00
jcastroplease feel free to send your feedback to myself or daniel holbach22:02

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