/srv/irclogs.ubuntu.com/2009/08/31/#ubuntu-classroom.txt

=== openweek6 is now known as bikedog1
greg-gpleia2: cna you update the -chat channel topic, it says UDW is over01:50
greg-gwhich is why some people are confused, I believe01:50
nhandlerThat better greg-g ? And it said Ubuntu *Open* Week is over ;)01:52
greg-gnhandler: whatever :)01:52
greg-gbut yes, thanks buddy01:52
openweek1date -u03:20
triniumdate -u06:27
triniumhello please, what is time of the ubuntu developer week??06:35
ulysses__16:00 UTC06:37
ulysses__http://timeanddate.com/worldclock/fixedtime.html?month=8&day=31&year=2009&hour=16&min=0&sec=0&p1=006:38
RishGood mornin folks!06:58
ulysses__good morning Rish06:59
Rishulysses__: hows' your day? ubuntu dev week starting from today eh?07:00
ulysses__yes07:00
Rishi'm exited :)07:00
ulysses__also:) i want to contribute more in Ubuntu07:01
Rishit's my dream to be an ubuntu developer! I wish the day would come one day!!07:01
ulysses__:)07:01
Rishbtw, where r u from?07:01
ulysses__Hungary07:01
Rishgreat! what's the local time there?07:01
ulysses__08.0207:02
Rishme from India, it's 11.32 here!07:02
ulysses__great:)07:02
Rishwhat u do? a developer?07:02
ulysses__no, i write hungarian documentations, and translate kubuntu docs to hungarian07:03
Rishwell, you already contributing by translating ubuntu docs! God bless you!07:03
ulysses__thanks:)07:04
Rishok, gotta go for college now. Nice talking. will see you in dev class today! byee07:04
ulysses__bye:)07:04
=== qwebirc68975 is now known as tester123
hackooso developers week is starting from 16:0007:38
hackoo?07:38
hackooI read in browser07:38
ulysses__yes07:39
ulysses__http://timeanddate.com/worldclock/fixedtime.html?month=8&day=31&year=2009&hour=16&min=0&sec=0&p1=007:39
hackooulysses__: but topic has time 21:0007:39
dholbachhackoo: that's a different session07:40
dholbachhang on07:40
hackooulysses__: so is there some other channels too for the developers week?07:40
dholbachhackoo: https://wiki.ubuntu.com/UbuntuDeveloperWeek/JoiningIn07:41
dholbachhackoo: https://wiki.ubuntu.com/UbuntuDeveloperWeek/Rules07:41
dholbachso there's #ubuntu-classroom (for the session itself) and #ubuntu-classroom-chat (for asking questions and chatting)07:41
hackoodholbach: thanks07:41
dholbachno worries :)07:41
hackoodholbach:  ok its good arrangement, I am so excited to learn things, I have never worked for development and using linux for only 4-5 months07:43
dholbachawesome - UDW is going to be fantastic07:43
dholbachjust writing up a blog entry about today07:43
qwebirc57037hi07:43
ulysses__that's other07:44
dholbachhttp://daniel.holba.ch/blog/?p=49107:45
openweek2what is this?07:48
dholbachopenweek2: did you read  https://wiki.ubuntu.com/UbuntuDeveloperWeek ?07:49
dholbachor the brochure linked from there?07:49
openweek2yeah07:49
openweek2some sort of classes are going on here tomorrow07:49
dholbachwhich specific questions do you have? :)07:50
openweek2well im new using ubuntu07:50
openweek2i want to learn more about it07:50
dholbachit'll be a great opportunity :)07:51
openweek2yeah07:51
openweek2i wont miss it07:51
dholbachonly around 9 more hours to go :)07:51
openweek2so how would it be like?07:51
openweek2is it chat07:51
openweek2or07:51
openweek2video07:51
dholbachchat07:51
dholbachthe session will be on #ubuntu-classroom07:52
dholbachquestions can be asked and general chat can happen on #ubuntu-classroom-chat07:52
openweek2thats cool07:52
dholbachyou can follow the links on https://wiki.ubuntu.com/UbuntuDeveloperWeek/Previous to see what those sessions have been like07:53
openweek2thanks07:54
hackoodev`: hello08:18
dev`hackoo: hi how are you08:19
=== qwebirc87824 is now known as TGrigsby
anni-jasmin'till 170010:05
=== HaRDi is now known as HaRDi437
=== dholbach_ is now known as dholbach
AnxiousNutso this should start after 5 minutes right?10:55
tordek-sanhi12:04
DKcrosshi12:04
=== ulysses__ is now known as ulysses
DKcrosshello12:30
DKcrosssome person know about the problem with splashy12:31
irjhi... anyone home13:14
=== rmcbride_ is now known as rmcbride
=== qwebirc37654 is now known as Gvorr
zubin713 hours to go!14:00
zubin71i cant wait!14:00
zubin71:-)14:00
tavishwill the channel be logged on irclogs.ubuntu.com14:01
pleia2tavish: yes14:02
tavishthats good14:03
dholbachhey pleia214:04
pleia2dholbach: g'day dholbach!14:04
dholbachhow's life? :)14:04
pleia2going good :) and you?14:04
dholbachvery good - thanks :)14:05
qwebirc70095Hello14:05
dholbachI'm very excited :)14:05
alourie|vmhi dholbach14:05
alourie|vmI decided to join to your lecture :-)14:06
dholbachalourie|vm: there's going to be a bunch of great sessions today :)14:06
alourie|vmdholbach: I know, but it will be too late for me. And yours really interests me14:06
alourie|vm:-)14:07
dholbachgood thing is they'll all be logged14:07
dholbachso you can dive into what happened tomorrow :)14:07
EagleScreenany problem following sessions with karmic?14:21
dholbachEagleScreen: not at all14:21
andihi everybody! are u ready for a noob question?14:56
qwebirc12876is that the noob the noob question?14:57
dholbachandi: just ask14:57
andii see o ne is ready^^, sry14:57
ikt_?14:57
=== ikt_ is now known as ikt
naliothandi: you really should be asking in #ubuntu14:58
andiis this the channel where the ubuntu-dev session will be?14:58
dholbachandi: yes14:58
dholbachkicking off in ~2h14:58
ikthow many hours till the first one?14:58
iktrah14:58
andisry i'm using irc the 1st time14:59
dholbachno worries14:59
ikt2am~ est14:59
andiah, ok14:59
iktI go through the logs so cheers in advance dholbach and other teachers/mentors :)14:59
dholbachikt: it's great to have you here!15:00
andii read about the developers week but it took me a while to realize thats an irc-session^^15:00
ikt:)15:00
NutCobblerThe instructions for the chat say there is a second channel for talking!?15:00
andihi daniel!15:00
dholbachNutCobbler: yes, #ubuntu-classroom-chat15:01
dholbachlater on I expect this channel to be a lot more quiet15:01
dholbachso the logs of the session are more readable15:02
andiubuntu-classroom-chat is for disscussion i think15:02
openweek3i am pretty sure that the workshop is in here, in like 2 hours15:02
dholbachquestions and chatter will go into #ubuntu-classroom-chat15:02
dholbachyes15:02
NutCobblerOdd.15:02
dholbachNutCobbler: mh?15:02
=== rugby471 is now known as rugby471|bikerid
=== qwebirc1168 is now known as Gvorr
=== qwebirc77249 is now known as TGrigsby
triniumhello15:46
Kamusinhi15:48
triniumgood, veru good, preparative  ready for ubuntu developed :D15:48
maik_haack11 minutes to go15:49
msp301tis not for another hour :(15:49
msp301but #ubuntu-classroom-chat is meant to be for general talk15:50
trinium1 hour and 10 minutes :)15:50
Kamusinyep15:54
VictorLobodate -u15:57
thiebaudewhat time does this start?15:58
=== trothigar is now known as fhoward
msp301Mon Aug 31 14:58:17 UTC 2009 ... at 16:00 UTC15:58
thiebaudemsp301, thanks mate15:59
=== fhoward is now known as trewa
msp301tis alright :)15:59
=== trewa is now known as troth
thiebaude11am eastern time15:59
=== troth is now known as trothigar
=== herbmann is now known as herbmann_work
=== VictorL is now known as vertis
=== MaCkeR is now known as aamod
=== aamod is now known as aa
=== aa is now known as aab
=== rugby471|bikerid is now known as rugby471
=== dconnolly is now known as neried7
=== qwebirc15880 is now known as robbbb
rubialhey16:36
rubialis it going to start at 9:30 IST16:36
rubial?16:36
ulysses16:00 UTC16:36
dholbachrubial: yes16:36
rubialdholbach: thnks16:37
rubialletme bring some ciggiartes then16:37
rubiali have time16:37
syedam;)16:37
AnxiousNutafter how many hours this will start?16:38
jacobAnxiousNut: 22 minutes.16:38
AnxiousNutthis is the first one? "getting started"?16:38
jacobAnxiousNut: yes16:39
=== tavish_ is now known as tavish
* nealmcb gets a head start by learning about couchdb - http://couchdb.apache.org/docs/intro.html - coming to the desktop via ubuntu one, and used in quickly16:43
nealmcbI like the idea of a "RESTful" database - programming for fun on the couch :)16:43
mhall119|worknealmcb: I think it's also going to be used by gwibber 2.016:44
devin122im on my couch right now. So i can wath the chat on my 52"16:44
devin122*watch16:44
msp301lol16:44
nealmcbhttps://launchpad.net/gwibber16:44
nealmcbso much to learn :)16:44
penguin42does anyone know of any good docs on the hibernate process and how things hook it ?16:45
nareshit hasn't started right?16:45
syedam15 more mins16:45
jacobnaresh: not yet, 15 minutes16:45
ulysses15 minutes16:45
* jacob grabs breakfast16:45
nareshcool16:45
nealmcbmhall119|work: so what would gwibber do with couchdb?  contacts?  synced with something else?16:46
mhall119|worknealmcb: it looks like they'll use it to store account settings instead of gconf16:47
nealmcbahh16:47
mhall119|workI only just installed 2.0 a couple days ago, so I'm not really sure16:47
kblininteresting, but not quite today's topic :)16:48
Karmickblin: Live and let live!16:49
nealmcbkblin: this is the unconference, preceeding the conference :)16:49
msp301yep16:49
nealmcbleverage the great minds here....16:50
msp301questions are gonna be held on #ubuntu-classroom-chat16:50
=== denizen is now known as deniz
kblinKarmic: notice the smiley up there :)16:50
nealmcbmsp301: good point - don't get used to just barging in like this after we get officially started16:51
=== deniz is now known as Guest16151
=== qwebirc10834 is now known as Gvorr
der_maik9 minutes to go16:51
=== Anxious is now known as AnxiousNut
msp301oh the anticipation :P16:51
kblinnealmcb: I'm genuinely interested in that couchdb thing. it might make syncing data across a couple of systems easier :)16:52
nealmcbkblin: thanks to didrocks in #quickly :)16:52
=== Guest16151 is now known as deniz9
rishhi, class started?16:55
mhall119|workwhat exactly is today's topic?16:55
* mhall119|work lurks in here 24/716:55
Karmicmhall119|work: https://wiki.ubuntu.com/UbuntuDeveloperWeek16:55
=== deniz9 is now known as dennis
msp301mhall119|work: an introduction to ubuntu development16:55
=== dennis is now known as denniz
=== riot_le is now known as Guest71455
EagleScreenclass start at 16:00 UTC, in 3 minutes16:57
dholbachWELCOME EVERYBODY TO UBUNTU DEVELOPER WEEK!17:00
dholbachWho's all here for Ubuntu Developer Week?17:00
the-dude\o/17:00
andolo/17:00
* penguin42 raises a flipper17:00
andi+17:00
shwnjhello :)17:00
* devin122 raises hand17:00
msp301me :)17:00
Narodon<-17:00
syedamhi17:00
trothigar:)17:00
rajihi17:00
medihi17:00
EagleScreenme, hello17:00
_Fauchi95_+17:00
juanje\o/17:00
papapep:D17:00
slicingcake\o/17:00
OresteHi all17:00
noraxhi17:00
codeanuhello :-)17:00
James147hi :)17:00
robbbbheyyy17:00
risho/17:00
anurag213hy there17:00
Karmickudos!17:00
ulysses\o/17:00
Ker__Hey17:00
d3tr01tsup17:00
ahehi17:00
aalcazarhi17:00
bptk421hi17:00
HobbleAlonghi17:00
svijheyy17:00
haveMercyhi17:00
marvinlemoshi17:00
Gvorrhi17:00
* arualavi .-D17:00
kamikalohi17:00
tdapplehowdy17:00
soyrochushola17:00
riot_hi daniel17:00
_Fauchi95_hi17:00
sligockig'day17:00
jcastrowoo!17:00
julian_sdahi17:00
qwebirc16121hi17:00
jacob\o/17:00
czambran_hi17:00
randomactionhi17:00
yo1991hi17:01
jango6:D17:01
ScottTestermanhi17:01
mhall119|workwow17:01
tordek-sanhi17:01
anurag213so lets begin17:01
=== benjamin_ is now known as claudius177
=== herbmann_ is now known as herbmann_work
syedam\ o /17:01
rishclass started!! good17:01
anurag213yup...17:01
Orpheyhi17:01
dholbachHELLO MY FRIENDS!17:01
c_kornme, too17:01
* nealmcb \o/17:01
rubial:)17:01
troxor\o17:01
qwebirc47321howdy17:01
frandieguez_hi to all!17:01
jacobquite the turnout17:01
shwnjhello everyone :)17:01
danbhfive1hi17:02
thowlandyo17:02
ililias:)17:02
dholbachMy name is Daniel Holbach... any questions after the session, ideas for improvement, pieces of advice, nice comments and cheques please to dholbach at ubuntu dot com.17:02
dholbachI'll be your host for the first two sessions which will be all about "Getting Started with Ubuntu Development".17:02
credobyte& me17:02
rishok, dholbach let's start17:02
rubialdholbach: funny name17:02
dholbachso let's first dive into a bit of organisational stuff17:02
rubialgo go go17:02
dholbachI noticed a bunch of people I already know but there's a lot of new "faces" here too17:03
codeanuya17:03
=== riot_ is now known as riot_le
dholbachWe're around 300 people in here already, which is why ALL QUESTIONS and ALL CHATTER go to #ubuntu-classroom-chat instead of #ubuntu-classroom17:03
dholbachelse the logs will be totally unreadable afterwards17:03
Panikosand me +17:04
the-dudewill logs be saved?17:04
tiaxwon't you set +m?17:04
dholbachthe-dude: yes17:04
dholbachso if you're not in #ubuntu-classroom-chat yet, please join the channel now17:04
* popey hugs dholbach 17:04
dholbachin #ubuntu-classroom-chat please prefix your questions with "QUESTION: "17:05
dholbachie: "QUESTION: Do you like doing Ubuntu Development?"17:05
=== qwebirc16121 is now known as rico45
dholbachalso for those not fluent in English, we have irc channels where you can ask questions in your language, they will be translated into English for you17:05
dholbach - Catalan: #ubuntu-classroom-chat-ca17:05
dholbach - Danish:  #ubuntu-nordic-dev17:05
dholbach - Finnish: #ubuntu-fi-devel17:05
dholbach - German:  #ubuntu-classroom-chat-de17:05
dholbach - Spanish: #ubuntu-classroom-chat-es17:05
dholbach - French:  #u-classroom17:05
dholbachif there's other channels for other languages, please announce them in #ubuntu-classroom-chat17:06
dholbachAlright... another piece of advice:17:06
dholbachhttps://wiki.ubuntu.com/UbuntuDeveloperWeek lists the timetable and links to a beautiful brochure that has more information17:06
dholbachhttps://wiki.ubuntu.com/UbuntuDeveloperWeek/Sessions should tell you if you need to prepare for any session17:07
dholbachhttps://wiki.ubuntu.com/UbuntuWeeklyNewsletter/glossary has some useful glossary for abbreviations and stuff17:07
dholbachalright... that should be everything organisational for now... just bookmark https://wiki.ubuntu.com/UbuntuDeveloperWeek and you'll be fine for this week :-)17:08
dholbachso let's get the session started17:08
qwebirc71751hey17:08
qwebirc71751lets get it started17:08
dholbachqwebirc71751: chatter and questions please in #ubuntu-classroom-chat17:09
MaNU__lets start17:09
rishwill you all stop talking and let dholbach speak?17:09
dholbachmy aim for the session is to get you from "How can I help out? I can't code in C/C++." (a question I get very often) to "Ah, I understand things much better now, I know where to look things up and who to ask."17:09
rico45pls start17:09
zubin71pls start17:09
dholbachso I'll cover a bunch of more general topics and help you set up a development environment17:10
credobytezubin71: patiance :)17:10
bptk421 /ignore #ubuntu-classroom JOINS PARTS NICKS QUITS17:10
diwanshusterhello everyone17:10
zubin71hello17:10
=== rene is now known as Guest54172
rico45no patiance impatient17:10
bptk421 /ignore #ubuntu-classroom JOINS PARTS NICKS QUITS17:11
dholbachso as a first step, please enable "Source code" in System -> Administration -> Software Sources -> Ubuntu Software17:11
diwanshusterdone17:11
Nomads /ignore #ubuntu-classroom JOINS PARTS NICKS QUITS17:11
dholbachOnce that's done, you'll notice a lot of entries that start with deb-src in /etc/apt/sources.list17:12
dholbachI'll explain why we need it a bit later on17:12
dholbachafterwards, please run17:12
dholbach   sudo apt-get install --no-install-recommends ubuntu-dev-tools build-essential pbuilder17:12
dholbachit will install a bunch of very useful tools we're going to need for the session17:12
dholbachubuntu-dev-tools contains scripts that are very useful for packaging and repetitive tasks (it also depends on devscripts which has even more useful stuff)17:13
dholbachbuild-essential is necessary to do the most common tasks having to do with compiling and building17:13
dholbachpbuilder is the perfect tool to build packages in a sane and reproducable way17:14
dholbachnow please edit the file    ~/.pbuilderrc    (gedit, vi, emacs, whatever you like best)17:15
dholbachadd the following line to it:17:15
dholbachCOMPONENTS="main universe multiverse restricted"17:15
dholbachand save it17:15
dholbachnow please run:17:15
dholbach   sudo pbuilder create17:15
dholbachit will set up a pbuilder instance for you which will take a while17:16
dholbachI forgot, please install gnupg too:17:16
dholbach  sudo apt-get install gnupg17:16
dholbach<_Fauchi95_> QUESTION: Do I need to use pbuilder or is that optional?17:17
dholbach_Fauchi95_: pbuilder is a great tool to test-build a package in a separate and minimal environment - it's a great way to test the build17:18
dholbachit's by no means a must, but I'll get back to the topic of testing in a bit17:18
dholbachok... while that's running, let's create a GPG Key - if you have one already you can lay back and relax17:18
dholbachPlease run17:19
dholbach  gpg --gen-key17:19
dholbachwe use GPG keys to sign packages to identify them as our own work and make sure they weren't tampered with17:19
dholbachyou can also use it to encrypt and sign other files and emails17:19
dholbachhttps://help.ubuntu.com/community/GnuPrivacyGuardHowto has more info and I won't go into too much detail, using the defaults should be fine for now17:20
dholbachgive it your name and your preferred email address, that should be fine for now17:20
dholbachonce it's done, you can get your fingerprint and key id by running something like this:17:22
dholbach   gpg --fingerprint your.name@email.com17:22
dholbachmine says something like:17:22
dholbachpub   1024D/059DD5EB 2007-09-2917:22
dholbach      Schl.-Fingerabdruck = 3E5C 0B3C 8987 79B9 A504  D7A5 463A E59D 059D D5EB17:22
dholbachuid                  Daniel Holbach .......17:22
dholbach059DD5EB is the key id17:22
dholbachAfterwards please run17:24
dholbach   gpg --send-keys KEYID17:24
dholbachie: gpg --send-keys 059DD5EB17:24
dholbachthis will upload your gpg key to the servers, so other people can identify your files and your emails as yours17:24
dholbachas a next step, we need to upload it to Launchpad too17:25
dholbach(if you have no Launchpad account yet, please visit https://launchpad.net/+login)17:25
dholbachit seems like some people have a problem with gpg not having a default keyserver set, in that case, please add  --keyserver keyserver.ubuntu.com17:26
dholbachyou can add your GPG key to Launchpad by visiting: https://launchpad.net/people/+me/+editpgpkeys17:27
dholbachok, that should be it for preparations right now17:27
dholbachso what did we do17:28
dholbach - install a bunch of tools17:28
dholbach - created a pbuilder instance (which might be still running for some of you)17:28
dholbach - created a GPG key17:28
dholbach - uploaded the key to keyservers and launchpad17:28
dholbachok... so what do we do with Launchpad17:29
dholbachLaunchpad is used for everything in Ubuntu - Translations of packages, Bug Reports for packages, Specifications of new Ubuntu features, Code branches, and packages are also built there17:30
dholbachthat plus our whole team organisation17:30
dholbachthe great thing about Launchpad is that it is written by awesome people and it is Open Source17:30
dholbachalso... it's written in Python :)17:30
dholbachWe'll have a bunch of interesting Launchpad sessions too this week:17:31
dholbach -  Using the LP API for fun and profit -- leonardr (Tue 1st Sep, 19:00 UTC)17:31
dholbach -  Getting started with Launchpad development -- gmb  (Wed 2nd Sep, 16:00 UTC)17:31
dholbach -  Being productive with bzr and LP code hosting - rockstar (Thu 3rd Sep, 19:00 UTC)17:32
dholbach -  Hacking Soyuz to get your builds done -- noodles775, cprov and wgrant (Fri 4th Sep, 20:00 UTC)17:32
dholbacha lot of other sessions will probably briefly cover Launchpad too17:32
dholbach<anurag213> Question:Not enough random bytes available.  Please do some oth17:33
dholbachanurag213: just let it sit there for a while - gnupg is getting more entrophy and random numbers from your machine17:34
dholbachok, next we'll tell the development tools who we are17:34
dholbachjust edit  ~/.bashrc  in your favourite editor17:34
dholbachand add something like this to the end of it:17:34
dholbach   export DEBFULLNAME='Daniel Holbach'17:35
dholbach   export DEBEMAIL='daniel.holbach@ubuntu.com'17:35
dholbachthen save it17:35
dholbachand run    source ~/.bashrc17:35
dholbachalright... that should be it for now17:35
dholbachso what's next17:36
dholbachI'll talk a bit about source packages and what we do with them, how code gets changed, when we change which pieces of Ubuntu, who you can talk to, where you can find out more, etc. :)17:36
dholbachthen we'll do some hands-on package building :-)17:36
dholbachso first of all, here's where you find more information:17:37
dholbach https://wiki.ubuntu.com/MOTU/GettingStarted17:37
dholbachbookmark the page! it links to all the important documents we have17:37
dholbachamong them:17:37
dholbach  - https://wiki.ubuntu.com/PackagingGuide17:37
dholbach     which has a lot of information about packaging in general17:38
dholbach     especially https://wiki.ubuntu.com/PackagingGuide/Recipes where you can find out how to use the tools easily17:38
dholbach     there's also https://wiki.ubuntu.com/MOTU/Videos which has a bunch of videos which talk about packaging, updating packages, patching stuff, etc.17:39
dholbach  -  https://wiki.ubuntu.com/UbuntuDevelopment is important too because it explains how Ubuntu Development generally works, processes, who is responsible for what and so on17:39
dholbach  - https://wiki.ubuntu.com/Packaging/Training invites you to Packaging Training IRC sessions which happen every Thursday17:40
dholbachthe next one is going to be: Thursday 3rd September, 6:00 UTC, Ubuntu Development Q&A... with me :-)17:40
dholbachok, now let's have a look at https://wiki.ubuntu.com/ReleaseSchedule17:41
dholbachit's a great way to understand more about Ubuntu Development if you know more about the different phases of the release17:42
=== riot_le is now known as Guest50469
dholbachthis is the schedule of the karmic release which we're working on right now - it's due for October 29th17:42
dholbachin the first phase the new release is created in Launchpad and the toolchain is set up which means that the most important packages (like libc and gcc, the compiler collection) are bootstrapped17:43
dholbachafterwards we start merging changes from Upstream and Debian (I'll go into more detail in a bit)17:43
dholbachand then UDS happens17:43
dholbachUDS is the Ubuntu Developer Summit where Ubuntu developers meet in real life to discuss and define new features17:44
dholbachthese often result into specifications where we exactly describe why we want the feature, how it's going to work, its impact and its implementation strategy17:44
dholbachhttps://blueprints.launchpad.net/ubuntu should have a few you can take a look at17:44
dholbach<alourie|vm> dholbach: how can a person participate in UDS?17:44
dholbachalourie|vm: everybody is invited to attend UDS, so if you live close or are sponsored to go there you can participate locally17:45
dholbachif you can't, you can participate via VOIP and IRC17:45
dholbach<gotunandan> QUESTION : what do you mean by bootstrap ?17:45
dholbachgotunandan: when the new toolchain is uploaded, you need to make sure the new gcc is built with the new libc6 and binutils, etc. - I unfortunately don't have much time to discuss it here, but #ubuntu-toolchain might be a good place to discuss it further17:46
dholbachonce the new features are all discussed and described in specifications people work on their features, upload new version of packages and we import a lot of packages from Debian17:47
dholbach(more on that in a bit)17:47
dholbachthat all happens in the "green" part of     https://wiki.ubuntu.com/ReleaseSchedule17:48
dholbach"green" doesn't mean "it's all great here and it all works"!17:48
dholbachit means that developers have a lot of freedom to work on things :)17:48
dholbachif you want to participate you need to run the new development release IN SOME FORM17:48
dholbachI say "in some form" because obviously you probably need your computer and can't have the kernel, libc, X or GNOME explode all the time :-)17:49
dholbachhttps://wiki.ubuntu.com/UbuntuDevelopment/UsingDevelopmentReleases describes how to safely and sanely use the current development release17:49
dholbach<trothigar> QUESTION: for packaging can you just run pbuilder for the development release?17:49
dholbachtrothigar: good question - just what I wanted to talk about :)17:49
dholbachthe answer is no17:50
dholbachtest-building a package for karmic is a good start17:50
dholbachbut you definitely need to do this on karmic too:17:50
dholbach  _____ _____ ____ _____ ___ _   _  ____ _17:50
dholbach |_   _| ____/ ___|_   _|_ _| \ | |/ ___| |17:50
dholbach   | | |  _| \___ \ | |  | ||  \| | |  _| |17:50
dholbach   | | | |___ ___) || |  | || |\  | |_| |_|17:50
dholbach   |_| |_____|____/ |_| |___|_| \_|\____(_)17:50
dholbachwhich is why just "test building on karmic" is not good enough17:50
dholbachhttps://wiki.ubuntu.com/UbuntuDevelopment/UsingDevelopmentReleases explains how to use a virtual machine, a chroot or a separate partition for your development work, so you don't hose the family computer :)17:51
dholbachok, moving on in the release schedule:17:51
dholbachafterwards we have Feature Freeze (which we're in in karmic right now) where you need to get exceptions for uploading new upstream versions or other radical changes17:52
dholbachat this time of the release some things might still be broken but the features should at least be half-way there17:52
dholbachafter that we introduce more and more freeze dates: UI, kernel, documentation, translations, etc.17:53
dholbachone gets frozen every week so we get a very stable release that can be safely documented, translated and tested17:53
dholbach<slacker_nl> QUESTION: are there automated testtools for package testing, eg tests for regression testing? or should that be provided by upstream?17:53
dholbachslacker_nl: great question17:53
dholbachthere's a number of upstream developers (which means software authors) that provide us with test suites and very often they are run during the build to directly find out if things got broken in the new release17:54
dholbachthere's tools like pbuilder for safe test-building and there's tools like lintian that can check your packaging for you17:54
dholbachok... let's take a quick 5 minute break and we can get our hands dirty afterwards17:56
dholbachfor all of you that need a new cup of tea or a drink or need to nip to the loo17:56
dholbachsee you in just a bit :-)17:56
dholbachalright... let's kick off part 218:00
dholbachfor all of you who just arrived: you can ask questions in #ubuntu-classroom-chat (please prefix with QUESTION:), logs will be available afterwards on https://wiki.ubuntu.com/UbuntuDeveloperWeek18:01
dholbachOk... now let's get some source package and let's try to test build it18:01
dholbachplease run18:01
dholbach   apt-get source hello18:01
dholbachif you have "Sources" enabled in Software Sources this should work now18:02
dholbachwhat it does it the following18:02
dholbachit will get the source package for the 'hello' package18:02
dholbachthere's the distinction between the source packages and the binary packages18:03
dholbachwhat my Mom installs, the .deb files are the binary packages which are a result of the build18:03
dholbachwhat we work on as Ubuntu developers is the source packages18:03
dholbachin the case of hello (on karmic) this means the following files:18:03
dholbach   hello_2.4-1.diff.gz  hello_2.4-1.dsc  hello_2.4.orig.tar.gz18:04
dholbachhello_2.4.orig.tar.gz means: the original source code that was released by the software authors of 'hello' in the version 2.418:04
dholbachthe 'orig' is important - it means: this tar.gz file didn't receive any changes at all, it's just as it was downloaded from the hello homepage18:05
dholbach(just renamed)18:05
dholbachhello_2.4-1.diff.gz is the compressed set of changes that were applied by Debian (and Ubuntu) developers to make the source package build the Debian/Ubuntu way18:06
dholbachso what does this mean "the debian/ubuntu way"?18:07
dholbachsome of you might have compile source code already, where you manually build software by running:18:07
dholbach./configure    make     sudo make install18:07
dholbachthe packaging process basically wraps around those build commands and enables us to apply the same build process to every kind of package18:08
dholbachso it doesn't matter if it's a python program, a set oh PHP modules, something written in C or something to do with Perl18:08
dholbachalso you add some meta information like the package name, a description, etc.18:08
dholbachThe session "Packaging from scratch" -- Laney on Friday will talk about that in more detail18:09
dholbachalso "Learning from mistakes - REVU reviewing best practices" -- mok0  on Thursday  will have useful tips18:09
dholbach<[BIOS]Dnivra> QUESTION: Why is dpkg-dev needed? I get an error it's not installed. isn't it available in the ubuntu repository?18:09
dholbachsorry, please run18:09
dholbach   sudo apt-get install dpkg-dev18:09
dholbachit's needed too, I thought it would be pulled in18:10
dholbachjust run18:10
dholbach     dpkg-source -x *.dsc18:10
dholbachafterwards and you'll be fine18:10
dholbachI'll get to the purpose of it in just a bit18:10
dholbach<[BIOS]Goo> QUESTION:Could you elucidate  "wraps around those build commands"18:11
dholbach[BIOS]Goo: ok, let's go into some more detail18:11
dholbachso a regular application written in C will often require you to run something like ./configure; make; make install; etc.18:12
dholbacha python application that uses distutils might need something like invocations of    python ./setup.py ....18:12
dholbachsometimes for a package to work afterwards (some simple scripts) it will be enough to just copy them where they belong18:13
dholbachthe package build process can be divided into steps like configuration, compilation, installation, something that happens post-installation and so on18:13
dholbachthink of it as a "meta build process"18:13
dholbachthat process is specified in the debian policy and we make use of that18:14
dholbachthe great thing about this standardisation is: our tools all treat source packages the same way, no matter what weird way they work internally18:14
dholbachmoving on :)18:14
dholbachhello_2.4-1.dsc just contains meta data of the package like md5sums and so on18:15
dholbachso what apt-get source (or  more specifically dpkg-source -x *.dsc) did was:18:16
dholbach - unpack hello_2.4.orig.tar.gz18:16
dholbach - unpack and apply the patch with our changes hello_2.4-1.diff.gz18:16
dholbachso you should be able to see the hello-2.4 directory18:16
dholbach(or hello-2.3 if you're on an older version)18:16
dholbachthis directory should contain a debian/ directory which basically contains all the packaging18:17
dholbachdaniel@miyazaki:~$ ls hello-2.4/debian/18:17
dholbachchangelog  control  copyright  postinst  prerm  rules  watch18:17
dholbachdaniel@miyazaki:~$18:17
dholbachI won't explain every last detail now, just very quickly18:17
dholbach - changelog: descriptions of all the packaging changes (one new entry per new version that was uploaded to the archive)18:17
dholbach - control: information about the source package (who maintains it, where's the homepage, which packages are necessary to build it, etc.) and the resulting binary package(s)18:18
dholbach - copyright: licensing and copyright information of the software18:18
dholbach - rules: how is the package build, how does the meta build process work18:18
dholbachwe can safely ignore the others for now18:18
dholbachalright... now let's test-build the package18:19
dholbachif your pbuilder setup succeeded, you just run the following18:19
dholbach    sudo pbuilder build hello_2.4-1.dsc18:19
dholbachif it works out, you should be able to have a look at /var/cache/pbuilder/result/hello_*.deb afterwards18:20
dholbachthis should work18:20
dholbach   less /var/cache/pbuilder/result/hello_*.deb18:20
dholbachthis will show you the contents of the package, its size and dependencies, etc.18:20
dholbachif you have a look at the build log you will see what happened there:18:21
dholbachfirst the separate build environment was set up, then some additional packages installed18:21
dholbachthen ./configure was run, then the actual compilation of the source code happened, then some files were installed and then they were all glued together in /var/cache/pbuilder/result/hello_*.deb, then the build environment torn down again18:22
dholbachthe fine thing about pbuilder is that it will store all the packages that are necessary to build a package18:22
dholbachand you don't need to download them over and over again18:23
dholbach<alourie|vm> dholbach: QUESTION: what if packages need an update?18:23
dholbachalourie|vm: you run    sudo pbuilder update   (similar to apt-get update)18:23
dholbach<trothigar> QUESTION: presumably the build deps are downloaded as binaries. Does pbuilder share the same cache as apt?18:24
dholbachtrothigar: you can set it up that way18:24
dholbachhttps://wiki.ubuntu.com/PbuilderHowto should have more information on the topic18:24
dholbachit came up in -chat a couple of times, so here goes:18:25
dholbach  <RainCT> penguin42: Yeah. Using pbuilder-dist (from ubuntu-dev-tools) is a great way to achieve that18:25
dholbachpbuilder-dist is a fine tool to test-build packages for various ubuntu and debian releases18:25
dholbachtalk to RainCT to find out more about it :)18:25
dholbachok... so how does Ubuntu Development work? what do people do with those .dsc .diff.gz and .orig.tar.gz files18:26
dholbachbasically for every change that is done to a package a new source package must be uploaded to the Launchpad build servers18:26
dholbachthat's where the gpg key comes in, if you're not part of the team (I'll get to that in a sec), it will reject your changes18:27
dholbachthe same applies for Launchpad Personal Package Archives (https://help.launchpad.net/Packaging/PPA)18:27
dholbachyou can think of it as a primitive (sorry everybody) version control system18:27
dholbachDeveloper A makes a change and uploads version 2.4-2 of hello18:28
dholbachand I can get it via   apt-get source hello   later on and improve it some more if I like18:28
dholbachthere are efforts going on to make more use of distributed revision control (using Bazaar on Launchpad) and Mr James Westby will talk about that later in the week18:29
dholbachFriday 4th September, 18:00 UTC - Fixing an Ubuntu bug using Bazaar -- james_w18:29
dholbachso how would you go about sending in changes now that you're not part of the team yet18:30
dholbacheasy: come to tomorrow's session "Fixing small bugs in Ubuntu" and learn how to produce patches18:30
dholbachonce you have the patch, you attach it to a bug report and subscribe the reviewers team18:30
dholbachthey'll give you a review and some advice and upload the change for you once it's all good18:31
dholbachbasically they'll download the source package, apply your changes, sign it with they gpg key and upload it for you18:31
dholbach<msp301> QUESTION: what would happen in the case that two users happen to update at the same time on Launchpad??18:31
dholbachmsp301: those collisions happen every now and then, Launchpad will just use the one that was milliseconds before and throw away the other :)18:31
dholbach<alourie|vm> dholbach: QUESTION: how do we prepare patches?18:32
dholbachalourie|vm: tomorrow, 16:00 UTC, this place :-)18:32
dholbachfind more detail about the reviewers team and how to get stuff uploaded at: https://wiki.ubuntu.com/SponsorshipProcess18:32
dholbachonce the reviewers are happy with your general work and get tired of uploading and reviewing myriads of changes for you, they'll tell you that and you can send your application for upload rights :-)18:33
dholbachhttps://wiki.ubuntu.com/UbuntuDevelopers explains the process18:33
dholbachok... that roughly explains how Ubuntu works18:34
dholbachthere's the release schedule with freeze dates, there's people working with source packages, there's bug reports and people attaching patches to them18:34
dholbachthere's packages getting built, downloaded and tested18:34
dholbachbut that doesn't explain how developers interact18:34
dholbachthere's mailing lists and IRC18:34
dholbachhttps://lists.ubuntu.com/mailman/listinfo/ubuntu-motu and #ubuntu-motu should be interesting for you18:35
dholbachbecause these channels contain the most awesome and frienly people that can help you out18:35
dholbachthere's lots more mailing lists: https://lists.ubuntu.com/18:35
dholbachand there's lots more irc channels: https://help.ubuntu.com/community/InternetRelayChat18:36
dholbachbut try to take one step at a time :-)18:36
dholbachit can be a bit overwhelming :)18:36
dholbach<bogor> QUESTION: Does building package in my pc will have it installed in my machine. If yes then how do i uninstall it if somethings goes wrong?18:36
dholbachbogor: no, you have to explicitly install the package, running   sudo dpkg -i bla.deb18:36
dholbachthat's why you probably best check out https://wiki.ubuntu.com/UbuntuDevelopment/UsingDevelopmentReleases18:36
dholbachwhich explains how to have a separate, up-to-date development environment18:37
dholbach<slacker_nl> QUESTION: you've talked about development releases, what about backports, how does that process work, when does a package get backported?18:37
dholbachslacker_nl: good one18:37
dholbachslacker_nl: so we all work on karmic now.... it's going to be released on October 29th18:37
dholbachafterwards the karmic will be frozen18:37
dholbachno uploads to karmic anymore18:38
dholbachafterwards only uploads to karmic-security karmic-updates and karmic-backports are accepted18:38
dholbach Effectively testing for regressions -- sbeattie  on Thursday will have more information on that18:38
dholbachhttps://wiki.ubuntu.com/SRU also explains it in more detail18:39
dholbach<openweek0_> QUESTION: where do i join if i wanna participate in gnome desktop env development?18:39
dholbachopenweek0_: check out https://wiki.ubuntu.com/Teams for more information on various teams within Ubuntu18:39
dholbach<msp301> QUESTION: is that the same with LTS releases ? retricted updates etc ??18:40
dholbachmsp301: no, what I just mentioned above concerns all releases, LTS or not18:40
dholbachLTS is just supported for longer than the "regular" 18 months, it's 3 years of support on the desktop and 5 on the server18:40
dholbach<c_korn> QUESTION: can I safely run "sudo rm -rf /var/cache/pbuilder/" to purge pbuilder ?18:40
dholbachc_korn: yes18:40
dholbachok, now that we know how developers interact, one thing is VERY important18:41
dholbachalways document changes you are about to make as good as you can18:41
dholbachwe have people living in various parts on earth, speaking different languages and having different skill sets18:41
dholbachas we maintain all packages together as one big team it's important that other developers don't have to second guess what you might have meant18:42
dholbachalso in 6 months time you probably don't want to second guess your own patches or documentation :)18:42
dholbachok... speaking of patches and developers: we're not alone in the open source world18:43
dholbachwe inherit a great deal of good stuff from the Debian project and other projects18:43
dholbachif we make changes we want to make sure to contribute them back to Debian, so let's take a quick look back at the hello example18:43
dholbach2.4-1 is the version in karmic18:44
dholbachthis means:18:44
dholbach - 2.4 is the release that was done by the authors of hello on their homepage18:44
dholbach - "-1" means that one revision of 2.4 was done in Debian and we inherited that18:44
dholbachdebian/changelog has more information on what happened there18:44
dholbachif I was to do a change for Karmic, the new version string would be18:45
dholbach 2.4-1ubuntu118:45
dholbachmeaning: still 2.4 upstream release, one (inherited) debian revision, one Ubuntu change18:45
dholbachthis also means that in the new Ubuntu release (karmic+1) we can't just copy (we call it 'sync') the package from debian, as we might overwrite the changes that I did in 2.4-1ubuntu118:46
dholbachif there was a 2.5-1 in Debian, we'd need to very closely check if we can just overwrite my changes or if I need to merge the manually into the 2.5-1 Debian version (and thus get 2.5-1ubuntu1)18:47
dholbachto be able to sync as much as possible and share the same codebase all over it's necessary to send patches upstream18:47
dholbachOn Wednesday we'll have a session called " Bug lifecycle, Best practices, Workflow, Tags, Upstream, Big picture" by jcastro and pedro_ who will talk about that some more18:47
dholbach<aacool> QUESTION: what do I run to test hello after the pbuilder build completes?18:48
dholbachaacool: you'd run    sudo dpkg -i /var/cache/pbuilder/result/hello*.deb    to install the resulting package18:48
dholbachand then run18:48
dholbach   hello18:48
dholbachin the command line :-)18:48
dholbach<penguin42> QUESTION: What happens with package numbering when ubuntu brings out a newer upstream version before debian does, then debian catches up?18:48
dholbachpenguin42: nice one :)18:48
dholbachso let's say Debian is still on 2.4-1 and we discover there's a new release out by the hello upstream guys18:49
dholbachwe'd call it 2.5-0ubuntu118:49
dholbachto indicate: it's upstream 2.5, we didn't get a revision of it from Debian, but have the first revision of it in Ubuntu18:49
dholbach<[BIOS]Goo> QUESTION: Since Ubuntu is debian based, can i follow the same package building process for Debian as well?(using pbuild)18:49
dholbach[BIOS]Goo: essentially, yes18:50
dholbachhttps://wiki.ubuntu.com/UbuntuPackagingChanges explains what's different in the Ubuntu world18:50
dholbach<norax> QUESTION: What's the order? I mean hello.2.4-1 is before or after hello.2.10-1 ? If before, What goes after hello.2.10-1_ubuntu9? If after what happend if the upstream developer use a different notation?18:50
dholbachnorax: first 2.4-1 then 2.10-118:50
dholbachto be on the safe side, you can do this18:50
dholbachdaniel@miyazaki:~$ dpkg --compare-versions 2.10-1 gt 2.4-1 && echo TRUE18:51
dholbachTRUE18:51
dholbachdaniel@miyazaki:~$18:51
dholbachdpkg is always authoritative on package versions18:51
dholbachthe command above checks if 2.10-1 is greater than 2.4-1 and print TRUE if it's true :)18:51
dholbach<soyrochus> QUESTION: Probably for last; how to clean up a system after using pbuilder. Not just apt-get remove, but more importantly removing all remants of local repositories, build remnants etc.18:52
dholbachsoyrochus: just deinstall the packages that we installed, remove ~/.pbuilderrc and /var/cache/pbuilder18:52
dholbachthat should get you there18:52
dholbachbut more practically: use a virtual machine18:52
dholbachhttps://wiki.ubuntu.com/UbuntuDevelopment/UsingDevelopmentReleases18:52
dholbach . o O { I didn't think that would be the most usef link today :-) }18:53
dholbach<playya> QUESTION: is it possibleto generate the debian/* file out of git TAGS, log,... and configure.ac?18:53
dholbachplayya: yes, some people use distributed revision control for 1) the packaging itself and 2) packaging upstream snapshots from bzr/git/svn/cvs/etc18:53
dholbach<slacker_nl> QUESTION: regarding giving back: what is prefered, create a debian package and wait for Ubuntu to sync with debian or to create a ubuntu package directly? does debian sync with ubuntu?18:54
dholbachslacker_nl: that depends on the release schedule18:54
dholbachslacker_nl: if we're a week away from release and the fix is critical we might ask somebody from upstream for advice, but we won't block on them if we know that we need that fix18:54
dholbachhttps://wiki.ubuntu.com/Upstream has more info on our collaboration with upstreams18:54
dholbachok... as last tips I'd like to give you:18:55
dholbach https://wiki.ubuntu.com/MOTU/GettingStarted18:55
dholbachbecause it links to all the important stuff18:55
dholbach https://wiki.ubuntu.com/Packaging/Training18:55
dholbachbecause of the session we'll have on thursday: general questions and answers about Ubuntu development, this place18:56
dholbachalso please join us in #ubuntu-motu on irc.freenode.net18:56
dholbachand on the ubuntu-motu mailing list18:56
dholbachI really hope to see all of you during the great sessions we have this week18:56
dholbachand hope to see you all as Ubuntu contributors really really soon18:56
dholbachmake me proud! :-)18:57
huatsthanks dholbach !18:57
dholbachthanks everybody - have a great Ubuntu Developer Week!18:57
alourie|vmdholbach: excellent lecture!18:57
* dinxter claps18:57
msp301thanks :)18:57
* alourie|vm cheers18:57
zubin71claps18:57
michele_Thank you for all the fish :)18:57
dholbach3 minutes break until rickspencer3 and didrocks talk about quickly!18:57
* didrocks waves at dholbach 18:57
zubin71thankx a lot18:57
[BIOS]Goo:) thanx18:57
bear24rwthanks18:57
trothigarthank you18:57
[BIOS]Goozubin :P18:57
shrinivasan1thanks a lot18:57
jango6thx18:57
alourie|vmthanks a lot18:57
^arky^thanks dholbach18:57
aalcazarthanks18:57
penguin42Thanks dholbach18:57
soyrochusgreat session; thanks18:57
pothosit was also good in german18:57
=== bennabi_ is now known as bennabi
rajithankx18:58
* porthose claps18:58
zubin71[BIOS]Goo : haha... :-P18:58
* sum-it thanks dholbach 18:58
pothosbut a little bit different18:58
frommecheers18:58
bennabithanks a lot18:58
[BIOS]GooThat was Amazin :) gonna contribute tonite itself :P18:58
david_ty18:58
bogordholbach, that was a awesome wonderful lecture18:58
lau_thx!18:58
kboithanks dholbach18:58
c_kornthanks dholbach18:58
Etilworg#ubuntu-classroom-talk18:58
dtrich_thanks you dholbach18:58
* RainCT hugs dholbach :)18:58
* alourie|vm joins18:58
* nixternal hugs dholbach 18:59
shobhitcheers!!18:59
credobytedholbach: respect! thnx for the lecture :)18:59
chiossif_thanks a lot dholbach !18:59
* dholbach hugs you all back18:59
arulalanthank you very much  dholbach !18:59
dholbachok... I'll quieten this channel down again :-)18:59
dholbachok everybody... let's kick of session number 2 (or 3 depending how you count it)18:59
dholbachnext up are rickspencer3 and didrocks19:00
rickspencer3hi19:00
didrockshey o/19:00
rickspencer3thanks for having us19:00
dholbachthey are members of Ubuntu's Desktop team, they are fantastic and know a lot about hacking on Desktop stuff19:00
dholbachshort: they definitely kick arse19:00
rickspencer3this is the first time I've done one of these19:00
rickspencer3so please be patient if I don't certain things correctly ;)19:01
dholbachplease ask all your questions in #ubuntu-classroom-chat19:01
dholbachand prefix them with "QUESTION: " so they stick out19:01
rickspencer3didrocks, promised to help me though :) and he'll channel your questions19:01
dholbachrickspencer3, didrocks: the floor is yours19:01
didrocksrickspencer3: we trust you :) I will relay question19:01
rickspencer3lol19:01
rickspencer3so, here we go ...19:01
rickspencer3in a nutshell ... quickly makes it easy and fun to write apps19:01
rickspencer3Let's start with installing19:01
rickspencer3While it's installing, I can provide some background19:02
rickspencer3Quickly works with Karmic only, atm19:02
rickspencer3sudo apt-get install quickly python-desktopcouch-records19:02
rickspencer3Note that this may take a while to download everything if you don't have it installed already, as it brings in lots of developer tools, like Glade, and dpkg-dev.19:02
rickspencer3After Quickly is installed, close the terminal and open a new one so that statement completion works.19:02
rickspencer3so while you are all watching it install, a little background19:03
rickspencer3Quickly has two parts so far19:03
rickspencer3A command line parser that parses your input and directs commands to "templates"19:03
rickspencer3and a template for writing an app for Ubuntu19:03
rickspencer3#19:03
rickspencer3Templates are sets of commands and code generators that are designed to work together in an end to end fashion to help developers write a certain kind of application.19:03
rickspencer3There is only on Quickly template so far, and it's for a Ubuntu project.19:04
rickspencer3we'll be using that one in this session19:04
rickspencer3Quickly is in on version 0.2 in Karmic universe repository19:04
rickspencer3Quickly templates should make programming *easy and fun*19:04
rickspencer3the easy and fun part is important!19:04
rickspencer3to make it easy and fun ... we've made some opinionated choices about what tools, apis, etc.. to use19:05
=== evil is now known as Guest82994
rickspencer3*very* opinionated ;)19:05
rickspencer3Python for the language19:05
rickspencer3pygtk for the UI framework19:05
rickspencer3Glade for the UI editor19:05
rickspencer3Gedit for the code editor (though this is easy for yuo to change)19:06
rickspencer3bzr for version control19:06
rickspencer3Launchpad for code hosting19:06
rickspencer3desktopcouch for storage/database (!)19:06
rickspencer3A terminal for the interface ... yes Quickly is a CL tool19:06
rickspencer3so, the command line nature, plus the opinionated choices has brought some comparisons to Rails19:07
rickspencer3*there is no quickly runtime or base class library*19:07
rickspencer3Using the Ubuntu Project won't bring in any dependencies on Quickly itself19:07
didrocksrickspencer3: there are some questions now. Ok to take them?19:08
rickspencer3so ... assuming quickly has installed, or is close to installing for you ...19:08
rickspencer3didrocks, sure19:08
rickspencer3go ahead19:08
didrocks<aacool_> QUESTION: Can we get quickly to work with Jaunty?19:08
didrocksrickspencer3: I let you this one :)19:08
rickspencer3well19:08
rickspencer3I don't see technically why it couldn't19:08
rickspencer3but we have't done any work for this atm19:08
rickspencer3I think there are desktopcouch builds for Jaunty19:09
rickspencer3so ... yes ... if someone does it :)19:09
rickspencer3other questions?19:09
didrocksin a nutshell, if desktopcouch is working for Jaunty, there is no blocker on quickly's side19:09
didrocks<slacker_nl> QUESTION: does quickly also work with qt (for KDE users)?19:09
rickspencer3ah19:09
rickspencer3well ... there is no QT template atm19:09
rickspencer3I would love to see one get created though19:10
rickspencer3I think though, that Kubuntu is a bit farther ahead than Ubuntu wrt developer tools19:10
rickspencer3more questions?19:11
didrocks<mandel_macaque> rickspencer3: Qt template:I'm planning to do one, that is why I'm here19:11
didrocksgood news \o/19:11
rickspencer3yeah!19:11
didrocksthat's all for the questions, atm :)19:11
rickspencer3k19:11
rickspencer3let's move on19:11
rickspencer3we can discuss new template in more depth if we have time at the end19:11
rickspencer3Probably the best way to see what Quickly is all about is to follow along as I build and release an app.19:12
rickspencer3We'll use the following commands to build the app:19:12
rickspencer3$quickly create ubuntu-project searchy19:12
rickspencer3$quickly glade19:12
rickspencer3$quickly edit19:12
rickspencer3$quickly run19:12
rickspencer3$quickly package19:12
rickspencer3$quickly release19:12
rickspencer3note that the "$" is just a little thing I do to show a command line input19:13
rickspencer3it's not part of the command ;)19:13
rickspencer3We'll build an app that directs a search to http://linuxsearch.org (kirkland's custom search page).19:13
rickspencer3Get started by creating an application from the ubuntu-project template.19:13
rickspencer3I'm calling it "searchy"19:14
rickspencer3Note that I've already claimed "searchy" on launchpad, so you'll need to choose a different name if you want to try to release your code.19:14
rickspencer3(best name ever) ;)19:14
rickspencer3Also note that there is currently a limitation in Quickly that means that your application has to have only a one word name. We hope to fix this in a future release.19:14
rickspencer3so once again, to generate the search app, I do:19:15
rickspencer3$quickly create ubuntu-project searchy19:15
rickspencer3this tells quickly to use the ubuntu-project template, and to call what is created "searchy"19:15
rickspencer3This causes a bunch of info to be dumped to the command line, but ends with the application being run19:15
rickspencer3Note that it's called "Searchy", but otherwise, it's just a stock application19:16
rickspencer3what quickly did was to copy over basically a sample application, and do some text switcheroos to customize the app19:16
rickspencer3with the name provided19:16
rickspencer3If you've closed the application and want to run it again, change to the searchy directory, and use:19:17
rickspencer3$quickly run19:17
rickspencer3note that you get a preferences dialog that currently doesn't work due to a small bug :(19:17
rickspencer3and also an about dialog19:17
rickspencer3let's look at editing the UI19:18
rickspencer3The UI I am envisioning is just a text box, and when I hit enter, it does the search. So I need to edit the default UI.19:18
rickspencer3First, go to the directory that quickly created for the app: $cd searchy19:18
rickspencer3then: $quickly glade19:18
rickspencer3Glade is the program that to edit the UI19:18
rickspencer3If I just run Glade from the Applicatons menu IT WON'T WORK with quickly19:18
rickspencer3so Glade should open with the generated UI files ready to edit19:19
rickspencer3Under the Projects menu, switch to SearchyWindow. This is the main window for your application.19:19
rickspencer3Delete the image and the label (image1 and label1) to clear out space in the UI.19:19
rickspencer3In the pallette, under Control and Display, click on the Text Entry control. Then click on the space where the label used to be.19:20
rickspencer3that should add a textentry for you19:20
rickspencer3and call it "entry1"19:20
rickspencer3Also, turn off the size request for the window.19:20
rickspencer3otherwise, the window will be a funny size when it runs19:21
rickspencer3Do this by selecting searchy_window in the inspector (the treeview at the top right)19:21
rickspencer3then in properties (the window right below) ...19:21
rickspencer3click Common tab, and unselect Width Request and Height Request checkboxes.19:21
rickspencer3so the UI is edited, but we need to tell the ui file to tell our python code to do something when the user hits the enter key in the edit field19:22
rickspencer3we do this by defining a "signal handler" in glade, and then writing handler code in python19:22
rickspencer3so to define the handler19:22
rickspencer3In Glade, click on the text entry (entry1) to select it19:22
rickspencer3Switch to the Signals tab19:22
rickspencer3Click in the Hanlder column in the activate row, and type "do_search". Hit Enter.19:23
rickspencer3Make sure that you save, or your changes won't show up when you run the app!19:23
rickspencer3so that's editing the UI19:23
rickspencer3didrocks, shall I pause to answer questions before we go on to write a little code?19:23
didrocksyes, there is a question on the glade side before we begin to write some code19:23
didrocks<AntoineLeclair> QUESTION: Why does launching Glade from Applications > Programming won't work with quickly? What does quickly do differently?19:23
rickspencer3what quickly does is assumes that there is one UI file for each Python class for each window type19:24
rickspencer3instead of a single big ui file taht defines all of the UI for the whole project19:24
rickspencer3this allows each class to derive from window, and most importantly from Dialog19:25
rickspencer3quickly needs to generate some xml files to tell Glade about these classes19:26
rickspencer3and if you just load Glade from the Applications menu, Glade doesn't get to see those UI files19:26
rickspencer3and won't load the UI files rather than risk corrupting them19:26
rickspencer3so, I'd love to make this easier and more fun in a later version19:26
rickspencer3other questions?19:27
didrocksrickspencer3: no, that's all. But there are a lot of people trying quickly :)19:27
didrocksyou can go on ^^19:27
* rickspencer3 sweats a little at the brow line19:27
rickspencer3Now we just need to write a little code to make the search happen19:27
rickspencer3Go back to the terminal and type: $quickly edit19:27
rickspencer3make sure that you are in the searchy directory19:28
rickspencer3This will open your editor (most likey Gedit) with all of the python files for your project19:28
rickspencer3apparently there is a bug that is keeping this form working well for VIM users atm :(19:28
rickspencer3Before you start, make sure your editor is set up for Python programming19:28
rickspencer3!!!19:28
rickspencer3this part is important19:28
rickspencer3or you will get weird errors and generally not have fun19:28
rickspencer3Python uses spaces and tabs very differently, and it can cause your program not to run, and can be very confusing if you don't set up Gedit properly.19:29
rickspencer3Go to Edit -> Preferences19:29
rickspencer3Go to Editor tab19:29
rickspencer3Turn on Use spaces instead of tabs19:29
rickspencer3Set Tab width to 419:29
rickspencer3This will set up Gedit to follow Python standards while coding19:29
rickspencer3if you haven't programmed python before ...19:29
rickspencer3just a quick note19:29
rickspencer3python uses indentations level to indicate scope19:29
rickspencer3so indentations are very critical19:30
rickspencer3ok ... so back to the code19:30
rickspencer3in gedit click on the tab for "searchy"19:30
rickspencer3Hit Cntrl-S to make the syntax coloring work19:30
rickspencer3"searchy" is the main python file for your application. It runs the code for the main window, and is the first file that gets run when you start your app.19:30
rickspencer3basically, to make the window do stuff, you'll add methods and member varaibles to the SeachyWindow class19:31
rickspencer3remember when we added do_search to edit1?19:32
rickspencer3All we need to do is to add a function in the SearchyWindow class called do_search19:32
rickspencer3this will be called when the user hits enter on entry119:32
rickspencer3The function will just read what is in the text entry field, construct a url string, and use webbrowser to do a web search. Searchy will then close itself.19:32
rickspencer3Add urllib by adding "import urllib" at line 10.19:32
rickspencer3Add urllib by adding "import webbrowser" at line 11.19:32
rickspencer3Then at line 82, hit enter a couple of times to add a new function at line 84.19:33
rickspencer3I put the edited file into pastebin here: http://paste.ubuntu.com/262082/19:33
rickspencer3    def do_search(self, widget, daata=None):19:33
rickspencer3        search_words = self.builder.get_object("entry1").get_text()19:33
rickspencer3        q = urllib.urlencode({'q':search_words})19:33
rickspencer3        url = "http://linuxsearch.org/?cof=FORID%3A9&cx=003883529982892832976%3At4dsysmshjs&"19:33
rickspencer3        url += q19:33
rickspencer3        url += "&sa=Search"19:33
rickspencer3        webbrowser.open(url)19:33
rickspencer3        self.destroy()19:33
rickspencer3that's the function that I wrote to respond to do_search19:33
rickspencer3Notice around line 86, the code uses "self.builder" to get a reference to the text entry that was added in Glade.19:34
rickspencer3Where does self.builder come from?19:34
rickspencer3Well, the ubuntu-project template sets up a relationship between .ui files generated by Glade, and Python *classes* that use those files.19:34
rickspencer3In order for this to work, the generated Python files have special functions that get generated that set up the objects for you.19:34
rickspencer3You can see this around line 94 of the searchy file. A function called NewSearchWindow.19:34
rickspencer3This special function knows how to set up SearchyWindow object. And then calls "finish_initializing" on the newly created object.19:34
rickspencer3This means a few things:19:35
rickspencer31. never try to create a searchy window in code like this:19:35
rickspencer3wind = SearchyWindow()19:35
rickspencer3because then the ui file won't be set up correctly, and "finish_initializing" won't be called.19:35
rickspencer32. Use "finish_initializing" to add any set up code, as that will be called *after* the UI is loaded.19:35
rickspencer3(stuff you may have put in an __init__() function before19:35
rickspencer33. Do this to create a new window:19:35
rickspencer3wind = SearchyWindow.NewSearchyWindow()19:36
rickspencer3and all will be well.19:36
rickspencer3so back to the do_search function19:36
rickspencer3this function pulls out the text from text entry on line 8619:36
rickspencer3Uses urllib to create a url parameter in line 8719:36
rickspencer3line 88 - 90 build a url string19:36
rickspencer3line 91 opens the web browser19:36
rickspencer3then line 92 closes the SearchyWindow19:37
rickspencer3when you are done coding ...19:37
rickspencer3use $quickly run19:37
rickspencer3to run it19:37
rickspencer3so that's the coding section19:37
rickspencer3didrocks, any questions before we discuss packaging or releasing?19:37
didrocksrickspencer3: there are two questions, but it's related to what you will discuss later, so, I'm queuing them19:38
didrocks<mandel_macaque> Question: Any special things to do if we want to add or own modules?19:38
rickspencer3ok19:38
rickspencer3for packaging will discuss later19:38
didrocks<rugby471> QUESTION: Does Quickly handle translations?19:38
rickspencer3for coding, right now you just create new files and pull them in19:38
rickspencer3for translations there are a couple of pieces19:39
rickspencer3first, since the ubuntu-project template uses glade by default, the UI is tranlatably by default19:39
rickspencer3for using strings in code, you would need to do the get_text trick, which quickly doesn;t handle natively, but perhaps it should19:40
rickspencer3I'll log a bug on that19:40
rickspencer3then for doing the translations, quickly assumes you will use launchpad for your code hosting19:40
rickspencer3so translations get supported there in the launchpad way19:41
rickspencer3maybe go on to packaging?19:41
didrocks(maybe a "$quickly addfile" command)19:41
didrocksone more question19:41
* rickspencer3 nods19:41
didrocks<rugby471> QUESTION: does quickly use gtkbuilder or libglade?19:41
rickspencer3gtkbuilder!!19:41
rickspencer3libglade is deprecated19:41
rickspencer3:)19:41
didrocksphew ^^19:41
didrocksrickspencer3: you can go on :)19:42
rickspencer3that's one of the reasons I wanted to do quickly, I wrote weeks of libglade code before I discovered it was deprecated19:42
rickspencer3I don't want that to happen to other people19:42
rickspencer3so's ... packaging19:42
rickspencer3ok .. here's the thing19:42
rickspencer3personally, I find packaging very persincety19:43
rickspencer3and complicated, and time consuming19:43
rickspencer3especially compared to say, using ftp to but files on a web site19:43
rickspencer3with quickly, though, it goes waaay easier19:43
rickspencer3Typically, you'll want to share your software in a PPA, but we'll cover that next ... but we can cover that next19:44
rickspencer3To make a package with quickly, you'll want to start by licensing your software19:44
rickspencer3To do this, start by editing the generated file called "Copyright".19:44
rickspencer3Change the top line to have the current year and your name and your email.19:44
rickspencer3So I would make the top line look like this:19:44
rickspencer3# Copyright (C) 2009 Rick Spencer rick.spencer@canonical.com19:44
rickspencer3then ...19:44
rickspencer3$quickly license19:44
rickspencer3The ubuntu-project template is going to use this to apply the GPL V3 (as no license is given in the command arg) to Searchy python files19:44
rickspencer3You can use other well-known license with $quickly license <LICENSE> (shell completion is your friend) or use your personal license.19:45
rickspencer3(thanks didrocks)19:45
rickspencer3Now if I reload my files, I can see that the license has been added to the top19:45
rickspencer3Note that if you didn't license before building the package on LP, it will be automatically licensed to GPL V3 with your LP user name for copyright19:45
rickspencer3so, easy to license, what about to package?19:45
rickspencer3Now I need to provide just a little info to quickly so that it knows enough about my project to make a good package.19:45
rickspencer3This info is provided in the setup.py file, also generated for you19:46
rickspencer3Open setup.py.19:46
rickspencer3Scroll down to the part that says:19:46
rickspencer3###################### YOU SHOULD MODIFY ONLY WHAT IS BELOW ######################19:46
rickspencer3Obviously, you only want to edit what is below that.19:47
rickspencer3You can see how I set that up here:19:47
rickspencer3http://paste.ubuntu.com/262183/19:47
rickspencer3DistUtilsExtra.auto.setup(19:47
rickspencer3    name='searchy',19:47
rickspencer3    version='0.1',19:47
rickspencer3    license='GPL-3',19:47
rickspencer3    author='Rick Spencer',19:47
rickspencer3    author_email='rick.spencer@canonical.com',19:47
rickspencer3    description='Quickly do Linux Searches',19:47
rickspencer3    long_description='A simple text entry field in a window that directs searches to http://linuxsearch.org',19:47
rickspencer3    url='https://launchpad.net/searchy',19:47
rickspencer3    cmdclass={'install': InstallAndUpdateDataDirectory}19:47
rickspencer3    )19:47
rickspencer3this is going to tell python-distutils-extra a little about me and my app19:47
rickspencer3You can also change the info in the desktop file to change the category and other stuff.19:48
rickspencer3For Searchy, it's called searchy.desktop.in19:48
rickspencer3Another good thing to do is to change the icon to your own.19:48
rickspencer3You can do that by editing the file "logo.svg" and the file "icon.png"19:48
rickspencer3but let's skip that for now19:48
rickspencer3Once you've licensed it and personalized it, to create a package, just use the command:19:48
rickspencer3$quickly package19:48
rickspencer3This will do a few things for you.19:49
rickspencer3First, it will search through your project for dependencies.19:49
rickspencer3!!19:49
rickspencer3thanks to pitti for this bit of magic!19:49
rickspencer3python-distutils-extra will infer dependencies from your code19:49
rickspencer3Then quickly package does a bunch of deb magic.19:49
rickspencer3This spits out a zipped up version of your project19:50
rickspencer3But more importantly, a .deb file19:50
rickspencer3You can find these files at the peer level of your project directory.19:50
rickspencer3If you double click on the .deb file, you can install your app19:50
rickspencer3or you can send the .deb file around, etc...19:50
rickspencer3didrocks, given that we have only a few minutes .. shall I touch on releasing, or just answer questions?19:50
didrocksrickspencer3: there are not so many questions you didn't answer, just drop some word on releasing and we will give the 5 latest minutes for questions19:51
rickspencer3k19:51
rickspencer3let's rock it!19:51
rickspencer3Before you can use quickly release, though, you need to set up launchpad.19:51
rickspencer3I think this was all covered in the last session, but here are some links19:52
rickspencer3and you can drop into #quickly if you want some more help19:52
rickspencer3create an account and set up ssh keys:19:52
rickspencer3https://help.launchpad.net/YourAccount/CreatingAnSSHKeyPair19:52
rickspencer3In your launchpad account, you will need a "personal package archive", or PPA19:52
rickspencer3But first, you'll need a pgp key for your ppa.19:52
rickspencer3Follow the instructions here: https://help.launchpad.net/YourAccount/ImportingYourPGPKey19:52
rickspencer3when you make you pgp key, don't add a comment to it!19:53
didrocksok, rickspencer3 seems to have some trouble with his connection19:55
didrocksgoing on19:56
didrocksIf there is a comment in it, quickly won't be able to find it.19:56
didrocksNow you have to setup a ppa to publish your code. You can come on #quickly and we will help you :)19:56
didrocksthen, create a launchpad project19:56
didrocksuse the command:19:56
didrocks$quickly release19:56
didrocksYou will have to interact a little with command to make it work19:56
didrocks(the first time, to say who you are, what lp project you want to be binded to)19:57
didrocksWhen this is all done, quickly will churn for a while building and signing packages19:57
didrocksThen it will upload the package to your ppa.19:57
didrocksOnce it's in your ppa, you can share that link with your users19:57
didrocksthey can install by adding the deb line to their sofware sources19:57
didrocksand after that, if you update the software, they will get the changes.19:57
didrockshere we are for the short story, now, going to answer to some questions in the last 3 minutes :)19:58
didrocks<HobbleAlong> Question: is quickly python only or can I use a different coding language; C for instance?19:58
didrocks<mandel_macaque> Question: (for later) are there template translation capabilities ex: move from Pyqt to PySide?19:58
didrockstoday, we only have one template, which is ubuntu-project template19:58
didrocksthe idea is to enable user to create a bunch of them19:58
didrocksquickly already support this, we have to blog on how to create a proper template19:58
didrocks<rugby471> QUESTION: How do you create new templates for quickly & what format are they in (briefly)19:59
didrocksso, for answering this question, wait for a week, I'm writing a "dive into quickly" blog post suit and you will hopefully have all your answers :)19:59
didrocksso, a ubuntu-C-project will be awesome19:59
didrocksubuntu-game template, that uses pygame  too20:00
didrocksand a gedit-plugin that makes it easy to add functions to gedit20:00
didrocksalso, LaTeX template, etc. the sky is the limit :)20:00
didrocks<mandel_macaque> Question: What are u using couchdb for? Can our apps interact with your records using desktopcouch20:00
didrockswell, no time to descript desktopcouch, but it's a good piece of software20:01
didrocksin short, it enables to store preferences locally or remotely :)20:01
didrocksrickspencer3: try to speak again20:01
=== ryan52 is now known as Ryan52
rickspencer3_sorry20:02
rickspencer3_my computer froze :(20:02
didrockshe's back \o/20:02
rickspencer3_but didrocks knows all20:02
rickspencer3_I'll hop into #quickly in like 30 minutes20:03
rickspencer3_and can discuss other questions there20:03
didrocksgreat, thanks rickspencer3_ for the session20:03
rickspencer3_thank you didrocks20:03
jawnsythanks rickspencer3_ and didrocks and all that participated by asking questions in the chat channel :-)20:03
didrockshope to see all you guys using quickly :)20:03
didrocksnow it's the turn of jawnsy for packaging perl20:04
didrocksjawnsy: you can do a perl template ;)20:04
didrocks(for quickly of course ^^)20:04
jawnsyI'll introduce myself and a few of the people that are joining me today for this session20:04
jawnsymy name is Jonathan Yu, I'm a new(ish) member joining the pkg-perl team, and I'm not a Debian Developer20:04
jawnsyI have with me today some other members of the team: gregoa, jackyf, mogaal, Ryan5220:05
jawnsygregoa is a Debian Developer and is up near the top rankings in terms of number of packages maintained :-) If you've ever used a Perl package on Debian, it's likely gregoa's had a hand in it at some point or another20:06
jawnsymogaal and jackyf are both newer members to the team, so they will be giving some more insight into what it's like to begin packaging Perl modules20:07
jawnsyRyan52 is almost a Debian Developer himself, and also contributes significantly to the group, and has also worked on the pkg-ruby-extras team to package Ruby libraries, so he can speak to the difference between the two worlds20:07
=== rickspencer3_ is now known as rickspencer3-afk
jawnsyin order to follow along, I'll ask that everyone who wishes to participate (follow along with a simple module we'll build) to install the following packages: devscripts lintian dh-make-perl20:08
jawnsyas usual, please ask questions in #ubuntu-classroom-chat, please hilight jawnsy-home and/or prefix it with QUESTION so I can see it easily20:08
jawnsyto begin with, we'll look at a CPAN module called Locale::Msgfmt, because it's simple and relatively easy to package20:09
jawnsyto begin every package, we use a tool called dh-make-perl20:10
jawnsyits purpose is to download a module and set up the skeleton framework for getting it built20:10
jawnsyPerl/CPAN developers have agreed upon a standardized toolchain which makes building, testing and installing packages a more-or-less consistent affair -- most packages, and all of the popular packages, build in the same manner20:11
jawnsythis makes it easy for us to build these modules in Debian20:11
jawnsyso to begin, type a line like this in a shell, after having installed the aforementioned prerequisite modules (that is, devscripts, lintian and dh-make-perl)20:11
jawnsyyou might want to do this in a temporary folder, as the build process installs stuff in your current working directory20:12
jawnsyso I've done:20:12
jawnsymkdir tmp20:12
jawnsycd tmp20:12
jawnsydh-make-perl --cpan Locale::Msgfmt20:12
jawnsynow, what that does is simply retrieve the Locale::Msgfmt package from CPAN and set up the main framework for it20:12
jawnsyso after seeing lots of text scroll by on your screen, you should end up with a .tar.gz and a directory named Locale-Msgfmt-0.1420:13
jawnsythe tarball is the upstream source, and the directory contains the upstream source plus some debhelper and other Debian-related metadata files, which are used during the build process20:13
jawnsylet's look at the anatomy of this package. taking a file listing in the Locale-Msgfmt-0.14 directory, we get this output:20:14
jawnsybin  Build.PL  Changes  debian  dev  lib  Makefile.PL  MANIFEST  META.yml  README  t20:14
jawnsyall of those files come from the upstream source, with the exception of the debian/ subdirectory, which, as mentioned, contains all of the files that do the magic of building the module20:14
jawnsynow... I'll digress a bit from the main topic to mention that you can build these CPAN modules and install them via dpkg by using some command line parameters to dh-make-perl; namely: dh-make-perl --install --cpan Locale::Msgfmt20:15
jawnsythis is great if you are just doing some small packages which you'd otherwise have installed via CPAN anyway, but when making them for Debian, there are a few more things we need to look through to ensure good Quality Assurance20:16
jawnsytake note that while this installs the package, it won't be able to update it, so you'll be stuck at that version indefinitely. thus, for packages you're likely to use a lot, a better solution is to file a Request For Package bug, and have that package officially supported in Debian20:17
jawnsyOkay, so let's look at some of the files in debian/:20:17
jawnsychangelog  compat  control  copyright  liblocale-msgfmt-perl.docs  liblocale-msgfmt-perl.examples  rules  watch20:18
jawnsythese files all have a little bit of magic to them -- we'll come back to this later20:18
jawnsylet's first get our Perl module to build into a familiar-looking .deb20:19
jawnsyso, change back to the Locale-Msgfmt-0.14 root directory20:19
jawnsythe packages we've installed so far should include the "debuild" program, so from the main tree, simply type that on your command line:20:19
jawnsy$ debuild20:19
jawnsyyou'll notice it outputs a lot of stuff, including the familiar (if you've ever installed a package via CPAN) test output20:20
jawnsyif we look a directory above us (this is why I said it's useful to create a temporary directory first).. we see a bunch of files now20:20
jawnsyso let's look at what each of these files are20:20
jawnsyliblocale-msgfmt-perl_0.14-1_all.deb  liblocale-msgfmt-perl_0.14-1.dsc           liblocale-msgfmt-perl_0.14.orig.tar.gz20:21
jawnsyliblocale-msgfmt-perl_0.14-1.diff.gz  liblocale-msgfmt-perl_0.14-1_i386.changes  Locale-Msgfmt-0.1420:21
jawnsyas Daniel Holbach (dholbach) mentioned earlier... the .deb is the binary that you actually install20:21
jawnsyso if you would like to install the package now, you can simply type: sudo dpkg --install *.deb20:21
jawnsythen there is the upload description (dsc) file, and also the original tarball, and the gzipped diff which indicates what changes have been made for Debian (notably, the inclusion of all the debian/ files)20:22
jawnsyokay, so now let's look into what the .deb would actually install in our system20:22
jawnsythankfully, dpkg has a flag that lets us do this easily. simply:20:23
jawnsy$ dpkg --contents *deb20:23
jawnsyplease, do let me know if I'm going too quickly or if there is anything unclear. do so in #ubuntu-classroom-chat.20:23
jawnsyso now we see a file listing, which includes exactly where everything will be installed on your system (if you do dpkg --install) on that package20:23
jawnsynow, in Debian we don't want to waste users' space20:24
jawnsyso we look at things like the examples and the documentation to make sure they are really useful, before installing them in /usr/share/doc20:24
jawnsyso for example in this case, the README file doesn't tell us anything useful20:25
jawnsythis is a good time to bring up what some of those magic files are20:25
jawnsythe README file is installed because it is listed in this file: liblocale-msgfmt-perl.docs20:26
jawnsysimilarly all the examples listed in liblocale-msgfmt-perl.examples are installed20:26
jawnsyso if there is ever documentation or examples you don't think should be installed, you can remove them here20:26
jawnsyso let's look inside the *.docs file20:26
jawnsywe find a single line, README, which is the name of the file that is installed, that we don't want20:26
jawnsyif we simply remove that line, then the debhelper installation mechanism will not install the file20:27
jawnsynow, since an empty file is useless, we can just remove the file altogether20:27
jawnsychanging back to the main Locale-Msgfmt-0.14 root directory, let's try rebuilding this package20:27
jawnsyby running `debuild' again20:27
jawnsyso again, the same hubbub of text scrolling by20:28
jawnsyand we can examine the contents once again (dpkg --contents *deb), noticing this time that the README is no longer installed20:28
jawnsyso we'll look briefly at the function of the other files20:29
jawnsyand then I'll open the floor for some questions and answers20:29
jawnsyPerl packaging really isn't difficult, and being a Perl user/developer myself, I got into it initially to get some packages I needed into Debian20:29
jawnsyI should mention a great thing about the pkg-perl group is that we have 10+ members, including gregoa, who are prolific Debian Developers20:30
jawnsyand it's often a matter of days or weeks to get a package uploaded, compared to months as you'd have with the normal mentors process20:30
jawnsyin the context of Ubuntu, we also handle our modules which have been sync'd to Ubuntu, and we have two important liasions to the Ubuntu community (many more are welcome!)20:31
jawnsynhandler aka Nathan Handler, and Iulian Udrea are both members of the team20:31
jawnsyeverything that benefits Debian or Ubuntu, beenefits both -- the changes flow both ways, and that is really the magic of open source20:31
jawnsyanyway, back to the meaning of the rest of the debian/ files20:31
jawnsyafter building I've now got something like this in debian/:20:32
jawnsychangelog  control    files                  liblocale-msgfmt-perl.debhelper.log  liblocale-msgfmt-perl.substvars  watch20:32
jawnsycompat     copyright  liblocale-msgfmt-perl  liblocale-msgfmt-perl.examples       rules20:32
jawnsythe .log file, liblocale-msgfmt-perl and the .substvars are just leftover files from the build, and aren't necessary20:32
jawnsyif they bother you, you can have the package build cleaned up by changing to: Locale-Msgfmt-0.14 again, and issuing:20:33
jawnsy$ fakeroot debian/rules clean20:33
jawnsy(though you'll need to install fakeroot for that)20:33
jawnsy(that command might work as debian/rules clean, without fakeroot, I'm not sure)20:33
jawnsyoh, heh, I'm learning new things every day. Ryan52 mentions to me out of band that "debclean" also accomplishes this task20:33
jawnsyokay, so the remaining files--20:34
jawnsychangelog is the Debian changelog file, which lists things that have been done in the Debian package only (upstream packages generally, but not always, also include their own changelog for the purpose of CPAN users)20:35
jawnsyfrom the dpkg contents listing we had before, recall that we saw these files:20:35
jawnsy-rw-r--r-- root/root      1063 2009-07-09 05:16 ./usr/share/doc/liblocale-msgfmt-perl/changelog.gz20:35
jawnsy-rw-r--r-- root/root       163 2009-08-31 11:09 ./usr/share/doc/liblocale-msgfmt-perl/changelog.Debian.gz20:35
jawnsythe changelog.gz is the upstream package changelog20:35
jawnsythe .Debian file is the one we know as debian/changelog20:35
jawnsythe changelog is also the source of our version number tracking for packages20:36
jawnsyyou'll notice in the changelog two lines; the first and the last:20:36
jawnsyliblocale-msgfmt-perl (0.14-1) unstable; urgency=low20:36
jawnsy -- Jonathan Yu <jawnsy@cpan.org>  Mon, 31 Aug 2009 11:09:19 -040020:36
jawnsywhich are notable20:36
jawnsynow, the first one is the package name + version number; unstable is the release name in Debian, where all new packages go20:37
jawnsythe trailer has, importantly, my name and e-mail address20:37
jawnsythis is what gets recorded as the "uploader" of a given version of a package, even though you won't be uploading packages directly -- a Sponsor does that on your behalf20:37
jawnsythough if you're a Ubuntu Developer then you'd be the uploader and wouldn't need a sponsor (but you already know that)20:38
jawnsythe next file, control, is where most of the magic happens20:38
jawnsyits purpose is to specify things like what the package is (ie a description), and other things like the dependencies the package needs20:39
jawnsyimportantly, Build-* things [note: the first paragraph relates to the Source package, from which binaries are built]20:39
jawnsythe Build-* relationships tells us what we need to install in order to build something, though that is separate from what we need to use the module20:39
jawnsyso, for example, while I might need Test::Exception to run tests during building, I don't need that in the binary package20:40
jawnsythis explains why some packages will show: libtest-exception-perl in Build-Depends, but not in Depends20:40
jawnsyI'll leave the exact meaning of the rest of the fields as an exercise for you, but the Debian Policy Manual describes them all at length20:40
jawnsythe copyright file contains information relating to the copyright of all our packages, which is important in Debian and Ubuntu because that is how we protect free software20:41
jawnsythe Debian Free Software Guidelines are a central part of the Debian Social Contract, and I imagine that to a great extent the Ubuntu community agrees20:41
jawnsyso moving along, the *.examples file is just like *.docs (which we removed).. and it contains a list of places to find examples20:42
jawnsyin this one, we find one line: t/samples/*20:42
jawnsywhich does what you'd expect with a shell glob, it just gets all the files in that directory and installs them (explaining much of what you saw in the dpkg contents listing)20:42
jawnsynow there are two more files left to explain20:43
=== Ryan52 is now known as |Ryan52_
jawnsythe watch file is autogenerated and most often doesn't need to be modified20:43
=== |Ryan52_ is now known as |Ryan52
jawnsythe purpose of this file is to scan the upstream for new releases, and given that most Perl-related things are released via CPAN, you probably won't need to touch this file20:43
jawnsythe rules file is an important part of the build process20:43
jawnsycurrently the format is just a simple makefile, but it calls the debhelper build system to get everything done20:44
jawnsyLocale-Msgfmt happens to be a simple module as I mentioned before20:44
jawnsyso the rules file just contains:20:44
jawnsy%:20:44
jawnsydh $@20:44
jawnsyand debhelper does the other magic :-)20:45
jawnsythere are some other features of debhelper which we use from time to time, but this gives you a basic idea of how to build Perl modules, and what each file is for20:45
jawnsybefore I open the floor up to some questions, do you guys from the pkg-perl team have any other comments to make?20:46
jawnsy...? :-)20:47
jawnsyI guess they're happy with my treatment of this :P20:47
jawnsyI could go into a more complicated example, or rant about why the pkg-perl team is cool, or answer other questions20:47
jawnsyI hope that this session (finished mostly in under 40 minutes) shows you how easy it is to participate in the team20:48
jawnsyas I mentioned, I'm not a Debian Developer nor Ubuntu Developer20:48
jawnsyyet I can contribute to both projects through the group and with the help of the many DDs that sponsor my uploads20:49
jawnsydinxter asks:20:49
jawnsyQUESTION: Is there somewhere i can look for a reference for what all those magic debelper files like .example are for and how they work, .install, etc20:49
|Ryan52the debhelper manpages are good. "man dh", "man dh_installexamples", etc.20:49
jawnsyyou'll notice to when you run debuild, you'll get a list of a bunch of debhelper commands that are being executed20:50
gregoaand for the big picture: man debhelper20:50
jawnsythe scripts are usually named according to what they do, so it's not too difficult20:50
jawnsy   dh_installman20:50
jawnsy   dh_installcatalogs20:50
jawnsy   dh_installcron20:50
jawnsy^ some example output20:50
jawnsyso if one is curious about what those do, you can take a look at their manpages20:51
jawnsythere aren't too many, and if you join the group (as we hope you will), it's easy to ask for help20:51
jawnsyI myself have only really packaged Perl modules, but many of the concepts are the same -- what the meta-files do, getting familiarzed with Debian and Ubuntu's social policies, etc20:52
jawnsyso that means it is a great way to begin contributing to Debian or Ubuntu, prior to even becoming a * Developer :-)20:53
jawnsyalexm mentions that even though I've gotten everyone to install lintian, I haven't explained what it does, or what the warnings mean20:53
|Ryan52 20:53
jawnsylintian is Debian's package checking system. it's a Perl program with many plugins and checks that looks at your code to figure out possible places you might have done something incorrectly20:54
jawnsythis is another tool which ensures Debian and Ubuntu's quality assurance20:54
jawnsywe can run this manually from the main directory (where our .deb file is)20:54
jawnsyso I get this output:20:55
jawnsyaven'jon(~/tmp)> lintian *changes20:55
jawnsyW: liblocale-msgfmt-perl: script-with-language-extension usr/bin/msgfmt.pl20:55
jawnsyE: liblocale-msgfmt-perl: description-synopsis-is-duplicated20:55
jawnsyW: liblocale-msgfmt-perl: description-contains-dh-make-perl-template20:55
jawnsythere are flags you can use to get more descriptive output, which also includes what the issue is and a proposed way of fixing it20:55
jawnsylintian is usually very good at doing this, though it is no substitute for experience (and this is where mentors and the sponsors come in)20:56
jawnsyfirst off is the script being installed with a language extension. Debian policy does not like .pl files being installed in /usr/bin20:56
jawnsywhich is where that warning comes from. we can fix this by providing an override during the install process20:56
jawnsylet me mention a bit about how that works20:57
gregoaI always run lintian as "lintian -iI --pedantic --color=auto <pkg>.changes" get also get the informational and pedantic messages and the nice informations jawnsy mentioned20:57
jawnsywhen you're building the package, by default it puts it somewhere like your home directory or in debian/20:57
jawnsyin our case, that's what produced the debian/liblocale-msgfmt-perl folder20:57
jawnsyprior to us cleaning it20:57
jawnsythat is the "staging area" where things are installed, before being rolled into the debian binary20:57
jawnsyso, in an override we'd be able to rename the script in this staging area, which thus changes the name that it's installed as, so as to comply with policy20:58
jawnsyoverrides are just a way for us to change the default behaviour of debhelper, and it's part of what makes it so flexible and great :-)20:58
jawnsythis is all probably a bit complicated for the beginner, but that's how that issue is tackled20:58
jawnsywe only have a minute or two left so I'll mention the other two warnings20:59
jawnsyone of them comes from what dh-make-perl inserts in your files, to make sure you actually edit them20:59
jawnsyyou'll see the boilerplate text when looking at the files and remove them, so you won't get that warning20:59
jawnsythe synopsis being duplicated has to do with a bad description in the description field20:59
jawnsynotably, the first line of the Description field (which is our synopsis or short description of the module) is the same as our long description20:59
jawnsyso usually this is where a packager would need to describe what the package does in a few lines (a paragraph or two at minimum) so that users know what it is :-)21:00
jawnsyso this about concludes our talk about Debian/Ubuntu Perl Packaging21:00
jawnsyI do hope you learned something from this, and that you consider joining the group, or even just visiting to see if it's something you might be interested in21:01
jawnsywe are on irc.debian.org (OFTC) in #debian-perl21:01
jawnsyaven'jon(~/tmp)> lintian *changes21:01
jawnsyW: liblocale-msgfmt-perl: script-with-language-extension usr/bin/msgfmt.pl21:01
jawnsyE: liblocale-msgfmt-perl: description-synopsis-is-duplicated21:01
jawnsyoops wrong paste21:01
jawnsyerr21:01
jawnsythis page welcomes new members, and provides lots of useful information: http://wiki.debian.org/Teams/DebianPerlGroup/Welcome21:01
jawnsythank you all for your21:01
jawnsytime21:01
jackyfas a sort of newscomer, I can add that the atmosphere of pkg-perl IRC discussion channel, where is significant part of collaboration is done, is very warm and, so, easy to join :)21:01
Riddellthanks jawnsy.  In a couple of minutes me and agateau will be doing an introduction to Plasmoid with Python21:02
jawnsynow I shall surrender the floor to agateau and Riddel for "Fun with Python Plasmoids" :-)21:02
agateauShall we start now?21:02
jawnsy*round of applause for Riddell and agateau* :-)21:02
agateauthanks jawnsy :)21:02
agateauRiddell and myself are now going to introduce you to plasmoid developments in Python21:03
Riddelland we want you to follow along at home!21:03
agateauI'll do a short intro of Plasma and Python, then Riddell will take you through your first plasmoid21:03
agateauand I'll come back with more widgetry for your plasmoids21:04
agateauFirst things first,21:04
agateauWhat is Plasma?21:04
agateauIt's the new implementation of the desktop21:04
agateauin KDE421:04
agateauRiddell reminds me I should tell you what packages you need to install while I talk:21:05
agateauapt-get install kdebase-workspace-bin plasma-scriptengine-python21:05
agateauand you should be all set21:05
agateauso, Plasma is based on Qt Graphics View framework, which is, quoting Qt doc:21:06
agateau"Graphics View provides a surface for managing and interacting with a large21:06
agateaunumber of custom-made 2D graphical items, and a view widget for visualizing the21:06
agateauitems, with support for zooming and rotation."21:06
agateauit can use hardward acceleration, and be themed with SVG files21:06
agateauwhat are plasmoid?21:06
agateauplasmoids are little gadgets you can put on your desktop21:07
agateauthe whole KDE4 desktop is made of plasmoids21:07
agateau(taskbar, pager, K menu, clock, systray...)21:07
agateausome examples:21:07
agateauhttp://kde.org/announcements/4.2/screenshots/plasma-other-widgets.png21:07
agateauhttp://kde.org/announcements/4.3/screenshots/desktop.png21:07
agateauPlasmoids can be developed in C++, JavaScript, Ruby...21:08
agateauand Python21:08
agateauour beloved language21:08
agateauPython is an interpreted, dynamic programming language21:08
agateauit's simple yet powerful,21:09
agateauand very versatile21:09
agateauit can be used for throw away scripts, desktop applications, web servers...21:09
agateauand plasmoids21:09
agateauas Riddell is now going to show you...21:09
Riddellwe had some questions first21:09
Riddell21:05 < wizz_> is plasmoid available for ubuntu 9.04 and python2.6?21:09
Riddellyes, you need to install python-plasma in jaunty21:10
Riddellas well as kdebase-workspace-bin21:10
Riddell21:06 < msp301> will plasma work under gnome??21:10
Riddellyes, you can use the plasmoidviewer app21:10
Riddellor you can try running plasma-desktop on top of gnome, goodness knows how that will end up21:10
Riddellso let's get coding!21:11
Riddella basic plasmoid is made up of a metadata file21:11
Riddellwhich tells plasma the name and other vital information about the plasmoid21:11
Riddelland some code21:11
Riddellthat all gets zipped up21:12
Riddelland finally you install the zip file so you can run the plasmoid21:12
Riddellso start off in a new directory21:12
Riddelland make the directories needed for our "hello-python" plasmoid21:12
Riddellmkdir -p hello-python/contents/code21:13
Riddellcd hello-python21:13
Riddellhere we'll put our metadata which is in .desktop format21:13
Riddell[Desktop Entry]21:13
RiddellEncoding=UTF-821:13
RiddellName=Hello Python21:13
RiddellType=Service21:13
RiddellServiceTypes=Plasma/Applet21:13
RiddellIcon=chronometer21:13
Riddellis the top, that gives it a name and tells plasma that it's an applet, also gives it an icon to use for the Add Applet dialogue21:14
Riddellnext some vital plasma info lines21:14
RiddellX-Plasma-API=python21:14
RiddellX-Plasma-MainScript=code/main.py21:14
Riddellso plasma knows it's looking for Python and it knows what code it's looking for21:15
Riddellfinally some plugin info lines21:15
RiddellX-KDE-PluginInfo-Author=Simon Edwards21:15
RiddellX-KDE-PluginInfo-Email=simon@simonzone.com21:15
RiddellX-KDE-PluginInfo-Name=hello-python21:15
RiddellX-KDE-PluginInfo-Version=1.021:15
RiddellX-KDE-PluginInfo-Website=http://plasma.kde.org/21:15
RiddellX-KDE-PluginInfo-Category=Examples21:15
RiddellX-KDE-PluginInfo-Depends=21:15
RiddellX-KDE-PluginInfo-License=GPL21:15
RiddellX-KDE-PluginInfo-EnabledByDefault=true21:15
Riddell21:15 < keffie_jayx> Riddell: what is the file name .Desktop?21:15
Riddellthis all goes in a file called "metadata.desktop"21:16
Riddelland here's the full thing21:16
Riddellhttp://people.canonical.com/~jriddell/plasma-python/hello-python/metadata.desktop21:16
Riddellso if you were following closely, you'll have worked out that code/main.py will be where the real code is21:16
Riddellcd contents/code  and emacs code.py21:17
Riddellwe all use emacs don't we? :)21:17
Riddellsorry   emacs main.py21:17
Riddellpython always starts with importing the relevant libraries21:18
Riddellin this case it's PyQt and PyKDE21:18
Riddellfrom PyQt4.QtCore import *21:18
Riddellfrom PyQt4.QtGui import *21:18
Riddellfrom PyKDE4.plasma import Plasma21:18
Riddellfrom PyKDE4 import plasmascript21:18
Riddellwe want to make a class inheriting from the plasma Applet base class21:19
Riddellif you know object orientated programming, python is very simple21:19
Riddellclass HelloPython(plasmascript.Applet):21:19
Riddell    def __init__(self,parent,args=None):21:19
Riddell        plasmascript.Applet.__init__(self,parent)21:19
Riddellthat's the class header and the constructor, which just calls the parent constructor21:20
Riddellwe want an init() method to do some basic setup21:20
Riddell    def init(self):21:20
Riddell        self.setHasConfigurationInterface(False)21:20
Riddell        self.resize(125, 125)21:20
Riddell        self.setAspectRatioMode(Plasma.Square)21:20
RiddellPlasma prefers we don't do the basic setup in the constructor so it gives us this separate init() method instead21:21
Riddellthe code should be pretty self readable because KDE APIs are like that, and Python is clean as programming languages come21:21
Riddellthe main body we're interested in is the paint method which will paint our hello message21:22
Riddell    def paintInterface(self, painter, option, rect):21:22
Riddell        painter.save()21:22
Riddell        painter.setPen(Qt.white)21:22
Riddell        painter.drawText(rect, Qt.AlignVCenter | Qt.AlignHCenter, "Hello Kubuntu!")21:22
Riddell        painter.restore()21:22
Riddellwhich is also pretty self explanatory, it uses the painting object to put some text on the screen21:22
Riddellfinally plasma needs us to create the applet object from our class21:23
Riddelldef CreateApplet(parent): return HelloPython(parent)21:23
Riddellthe whole code can be found here http://people.canonical.com/~jriddell/plasma-python/hello-python/contents/code/main.py21:23
Riddellnext we need to package it21:24
Riddellgo back to your top level directory and put it into a zip file21:24
Riddellzip -r hello-python hello-python21:24
Riddellfinally install it with plasmapkg21:25
Riddellplasmapkg -i hello-python.zip21:25
Riddellit will say if it installed correctly or not21:25
Riddellif it's installed correctly you should be able to add it as a widget to your plasma desktop21:25
Riddellor if you're not using KDE you can use plasmoidviewer21:25
Riddellplasmoidviewer hello-python21:26
Riddellwith any luck it'll look a bit like this http://people.canonical.com/~jriddell/plasma-python/hello-python.png21:26
Riddellyou can get the zip file from http://people.canonical.com/~jriddell/plasma-python/hello-python.zip incase you didn't get all the code21:27
Riddellwhoever manages that successfully first gets a free beer21:27
Riddellagateau: want to take them to the next level?21:27
agateauRiddell: yup!21:28
agateauSo,21:28
agateauWe will continue with widgets21:28
agateauSo far the created plasmoid draws text itself in the paintInterface() method21:29
agateauThis is quite powerful because you get a very fine control over what you want to draw21:29
agateaubut it can also lead to inconsistency if every plasmoid draw things their way21:29
agateauTo help with this, plasma comes with a quite complete set of widgets21:30
agateauYou can use regular Qt widgets in a Plasmoid,21:30
agateaubut using Plasma widgets is a better idea because they will match the plasma theme21:31
agateauand you will get fancy effects for the same price21:31
agateauA good example of a plasmoid which uses Plasma widgets is powerdevil21:31
agateauhttp://people.canonical.com/~agateau/udw/powerdevil.png21:31
agateauas you can see, we can use labels, slidesrs, comboboxes, buttons...21:32
agateauquite a few things21:32
agateaulet's modify the previous example to use widgets instead of custom painting21:32
agateauI suggest you make a copy of the hello-python dir21:33
agateaujust make sure you rename the plasmoid21:33
agateau- edit metadata.desktop21:33
agateau- change X-KDE-PluginInfo-Name value to hello-widget21:34
agateaunow go to our new copy of main.py21:34
agateauWe no longer need paintInterface() so we can remove it21:35
agateauinstead we are going to add some lines to the init() method21:35
agateauFirst we create a label:21:35
agateaulabel = Plasma.Label(self.applet)21:35
agateauAnd define some text in it:21:36
agateaulabel.setText("Hello world!")21:36
agateauNotice that we used self.applet, not self when we created the label21:36
agateauThis is little Python Plasma quirk, just remember to use self.applet as a parent for your widgets and all will be fine21:37
agateauIf you try it like this, your plasmoid won't behave very well when resized21:37
agateauWe need to assign a layout to the plasmoid and add our label to it21:38
agateaua layout is like an organizer: it ensure widgets are correctly aligned and resized when the plasmoid gets resized21:38
agateau self.layout = QGraphicsLinearLayout(Qt.Horizontal, self.applet)21:38
agateauHere it is, an horizontal layout21:39
agateaunow we add our label to it21:39
agateauself.layout.addItem(label)21:39
agateauAnd it should be good21:39
agateauYou can give it a try in the same way Riddell shown you with the first plasmoid21:39
agateaucd to the hello-widget/ dir21:40
agateauzip -r ../hello-widget.zip .21:40
agateauplasmoidviewer hello-widget21:40
agateauoups...21:40
agateauforgot the install step21:40
agateauplasmapkg -i ../hello-widget.zip21:41
agateauthen plasmoidviewer hello-widget21:41
agateau(actually, you can install from the dir directly, "plasmapkg -i ." will work fine)21:41
agateauDid you get a widget-powered "Hello world" plasmoid?21:42
agateauIf you want to try more widgets, you can have a look at the list of Plasma classes:21:42
agateauhttp://api.kde.org/4.2-api/kdelibs-apidocs/plasma/html/annotated.html21:43
agateau(It's C++, but the doc is usable in Python with no changes)21:43
agateauSince KDE 4.3, there is even a VideoWidget!21:43
agateauWith this, I am going to leave you in the expert hands of Riddell21:44
Riddellwe had some questions over in -chat21:44
Riddell21:28 < NamShub> Question: I would like to learn how to add a configuration dialog and read/write settings from this dialog21:44
Riddellwhich was well answered by fliegenderfrosch21:44
Riddell21:31 < fliegenderfrosch> NamShub: setHasConfigInterface(True), then you reimplement the functions showConfigurationInterface(self) and createConfigurationInterface(self, parent)21:44
Riddell21:31 < fliegenderfrosch> showConfigurationInterface(self) basically just creates a KPageDialog and calls createConfigureInterface with it as argument21:44
Riddellas I said KDE APIs are designed to be easy to read so just read the docs21:45
RiddellI also pointed NamShub to plasma-widget-googlecalendar as a larger example which has recently been added to karmic21:45
Riddellfliegenderfrosch wanted to know when the apidocs for PyKDE 4.3 are available?21:45
Riddellthat'll happen when Sime gets some spare time, he maintains PyKDE single handed and is quite the hero21:46
Riddellin the mean time the 4.2 API is pretty good http://api.kde.org/pykde-4.2-api/plasma/index.html21:46
Riddelland you can always use the C++ API docs and convert them easily enough http://api.kde.org/4.x-api/kdelibs-apidocs/plasma/html/index.html21:46
RiddellI'll quickly take you through a more complete example21:47
Riddellcopy your hello-widget directory to powerchart21:48
Riddelland edit metadata.desktop to give it a Name=Power Chart and X-KDE-PluginInfo-Name=powerchart21:48
RiddellI'll not paste the whole of the code but you can find it here http://people.canonical.com/~jriddell/plasma-python/powerchart/contents/code/main.py21:48
Riddellthis example is a battery monitor21:49
Riddellit uses a powerful tool in Plasma, the data engine21:49
Riddelldata engines are plugins which provide some useful data, could be about the network status or could be about a blog feed21:49
Riddellthe engine can be used by several applets if they have a need for it21:50
RiddellPlasma's API is full of useful GUI widgets as agateau said earlier21:50
Riddelland this example uses a widget called a SignalPlotter:  self.chart = Plasma.SignalPlotter(self.applet)21:50
Riddellwhich draws a chart for us21:51
Riddellthe connectToEngine() method creates a dataengine of type 'soliddevice'21:51
RiddellSolid is the KDE library which gives us information about all sorts of hardware21:51
Riddellit's cross platform so it'll work on Linux, BSD, Windows and more21:52
Riddellwith a simple  self.engine.connectSource(battery, self)  our applet will get called whenever the solidengine reports a change in the battery21:52
RiddelldataUpdated() will get called and that grabs the battery value and puts it into the SignalPlotter widget21:52
Riddellit looks like this http://people.canonical.com/~jriddell/plasma-python/powerchart.png21:53
Riddellas you can tell, the power of KDE is in its libraries and APIs, you can do a lot with a little code21:54
Riddellhttp://people.canonical.com/~jriddell/plasma-python/powerchart.zip is the final code21:54
Riddellwe're almost out of time21:55
Riddellany questions?21:55
RiddellRainCT rightly noted that Encoded= isn't needed in .desktop files any more, so that's one less line of code needed :)21:55
Riddellwe have lots of plasmoid packaged in karmic now21:55
Riddelland you can get loads more from the Get New Stuff button in Plasma which downloads them from kde-look.org21:56
Riddellif you have an interesting applet written do put it on kde-look.org21:56
Riddelland if you find an interesting applet that a lot of people would be interested in, we probably want it packaged up into a .deb, which is pretty easy21:56
Riddelljoin us in #kubuntu-devel if you want to help or ask developer questions21:57
Riddellor #plasma for more detailed plasma knowledge21:57
Riddellthese tutorials came from techbase.kde.org21:57
Riddellhttp://techbase.kde.org/Development/Tutorials/Plasma21:57
Riddellyou can find loads of useful information on techbase (and if it's not there, it's a wiki so edit!)21:58
Riddell21:56 < keffie_jayx_> QUESTION: is there a guide for packaging these plasmoids to keep in a PPA or something?21:58
Riddellthere's the normal packaging guide on the ubuntu wiki21:58
Riddellfor examples of Python Plasmoid packaging you can look at plasma-widget-facebook say in karmic21:59
agateauan interesting alternative distribution channel is kde-look,21:59
Riddellas agateau said you can upload it to kde-look.org so others can download it with Get New Stuff21:59
Riddell:)21:59
Riddelland if you want the package in the main Ubuntu archive put it on Revu and ping us on #kubuntu-devel to review it22:00
Riddelltime up, anything to add agateau?22:00
agateauno, except that we are waiting for your plasmoids!22:00
Riddellthanks for coming everyone22:01
Riddelllogs are online already at http://irclogs.ubuntu.com/2009/08/31/%23ubuntu-classroom.html22:02
agateauWe should give appropriate credits:22:03
agateauOh, actually Riddell did :)22:04
Riddellthanks to Simon Edwards for the tutorial and for PyKDE :)22:05
Riddellthe logs are also at https://wiki.kubuntu.org/MeetingLogs says ausimage22:05

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