=== lag` is now known as lag
=== KKmos is now known as Kmos
=== qwebirc57593 is now known as geco2
=== angeldaker is now known as daker
rrrrrrr23any one der12:56
rrrrrrr23wat is dis abt12:56
Ampelbeinrrrrrrr23: this is the classroom where sessions for ubuntu are held. https://wiki.ubuntu.com/Classroom has more information.13:00
=== msnsachin12 is now known as msnsachin
rrrrrrr23but no one is teaching13:00
Ampelbeinrrrrrrr23: you can see the schedule at http://is.gd/8rtIi13:01
=== yofel_ is now known as yofel
=== Quintasan_ is now known as Quintasan
=== msnsachin12 is now known as msnsachin
=== msnsachin12 is now known as msnsachin
=== msnsachin12 is now known as msnsachin
=== med is now known as medberry
=== _LibertyZero is now known as LibertyZero
=== nigelb_ is now known as nigelb
=== chihchun- is now known as chihchun
=== kim0_ is now known as kim0
=== mhall119_ is now known as mhall119
=== tubadaz_ is now known as tubadaz
=== shadeslayer_ is now known as shadeslayer
dholbachI know it's unfortunate that it's the last day, but I promise it's going to be action packed and loads of fun.15:56
dholbachif you haven't joined #ubuntu-classroom-chat yet, please do that now15:56
dholbachbecause that's where all the chatter and the questions go15:56
dholbachyou know how it works... please prefix your question with QUESTION:15:56
dholbachfirst up are Brian Murray and Nigel Babu who are going to tell us how to get better bug reports15:57
dholbachwe still have a few minutes left, so go and grab yourself some coffee, tea or water and let's get cracking in 3 minutes :)15:57
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Getting better bug reports - Instructors: bdmurray, nigelb
dholbachalright... bdmurray, nigelb: the stage is yours16:01
nigelbok, that's our cue!16:01
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2011/03/04/%23ubuntu-classroom.html following the conclusion of the session.16:01
nigelbHello and welcome everyone!16:01
nigelbI'm nigel from the Bug Control Team and with me is bdmurray who's with the QA Team and the Bug Master for Ubuntu16:02
nigelbWe're both going to talk to you folks today about getting better bug reports for your application16:02
nigelbBugs happen with software.  We can't control it.16:02
nigelbGetting good bug reports is very essential to us developers.16:03
nigelbSometimes along with bugs we want the user to give us certain debugging information.16:03
nigelbSometimes we want to talk to users just before and just after they file a bug.16:03
nigelbOne of the first things we'd like to show you is a newish LP feature.16:03
nigelbThis new feature lets us set package specific bug reporting guidelines.16:04
nigelbFor example, the ubiquity package can have specific guidelines (and it does!).16:04
nigelbLets take a look at the information displayed for ubiquity.16:04
nigelbLets all look at https://bugs.staging.launchpad.net/ubuntu/+source/ubiquity/+filebug.  This is LP's staging interface and feel free to play with it.16:04
nigelbIf you enter a summary and click next, you'll get to see what I'm talking about16:05
nigelbIf you get a list of duplicate bugs, click "No, I want to file a new bug" and you should see it16:06
nigelbHere's a screenshot of what I see http://people.ubuntu.com/~nigelbabu/Screenshot.png16:07
nigelbSo, the cool bit is we can tell our users that "Please attach the files /var/log/syslog and /var/log/partman to your bug....16:08
nigelband here we get a huge advantage, the bug report now has some information that is probably absolutely necessary for triaging it16:08
nigelbLaunchpad also lets developers set the bug reported acknowledgement.16:09
nigelbThis acknowledgment might be a good way to tell people to test this package from a PPA or tell them what to expect next16:09
nigelbThis would be awesome if you have a daily build PPA for your package16:10
nigelb(If you dont, hang around and listen to Quintasan_ later today ;) )16:10
nigelbThe Bug supervisor for Ubuntu, which is set to Bug Control has access to edit the bug reporting information and the acknowledgement16:10
nigelbSince I'm part of bug control, I can see this edit page16:10
nigelbHere's a screenshot of that page: http://goo.gl/t73Lj16:10
nigelbAny questions so far?16:11
nigelbMoving on then.16:11
nigelbThe next very important way to get good bug reports is through apport.16:12
bdmurraynigelb: if I may16:12
nigelbbdmurray: please :)16:12
bdmurrayIf you can not set the bug reporting guidelines or the acknowledgement for a particular package please let nigelb or I know, or email the bug squad, and we'll be happy to set it for you.16:13
bdmurrayAnything we can do to get higher quality bug reports is a win for everyone! ;-)16:13
ClassBottechbreak asked: can you explain bit more no syslog and partman ?16:15
bdmurraySo ubiquity logs information to /var/log/partman and /var/log/syslog and the developers want / need to this information to sort out what is going on16:16
bdmurrayAfter file in the title and the description and the bottom you'll notice an attach files dialog.  There you can then add a log file as an attachment.16:17
bdmurrayHowever, we have just the tool for you techbreak which makes bug reporting much easier.16:17
bdmurrayWhich we'll get to shortly.16:18
nigelbOk, so apport is that mystery tool :)16:18
nigelbApport is a system which intercepts crashes right when they happen, in development releases of Ubuntu16:18
nigelband gathers useful information about the crash and the operating system environment.16:18
nigelbAdditionally, it is used as a mechanism to file non-crash bug reports about software so that we receive more detailed reports.16:19
nigelbPrecisly what we're talking about.16:19
nigelbLets take a look at a bug filed by apport.16:19
nigelbI filed a test bug in the staging environment.16:20
nigelbThis bug is filed against the squid3 package (the proxy server for those curious).16:20
nigelbThe title and description isn't very helpful, but hey its a test bug!16:20
nigelbOf note here is that the squid3 package does not have an apport hook. (we'll get to what it is later)16:21
nigelbSo the information we have here is generic information that apport would collect for any package.16:21
nigelbWe have the architecture, the release being used, the package version and the source package name.16:22
nigelbAdditionally, in the Dependencies.txt attachment we have information about the versions of packages upon which squid3 depends.16:22
nigelbReally cool isn't it?16:22
nigelbI was talking about hooks earlier.16:22
nigelbApport lets us write 2 types of hooks,16:23
nigelbone is package specific hooks that run for a particular package.16:23
nigelblike for example a squid3 package16:23
nigelbThe other is symptom based hooks like audio or storage or display.16:23
nigelbaudio is the problem but the actual bug may be in different packages depending on the symptoms16:24
nigelbSo, questions on apport so far?16:24
=== mohammed_ is now known as Guest60593
nigelbnetsplit's playing havoc today, stay with us :)16:24
=== Guest60593 is now known as Safwat
nigelbLets take a look at /usr/share/apport/package-hooks to see what hooks are on your computer right now.16:25
nigelbOne thing common among a  lot of files in that folder is that a majority of them were probably written by bdmurray ;)16:26
nigelbWhen you open that folder there's going to be a lot of python files16:26
nigelbalmost all of them are of the pattern source_foo.py16:27
=== Pendulum_ is now known as Pendulum
=== msnsachin12 is now known as msnsachin
nigelbWell, apport hooks are all written in python because apport itself, I belive, is written in python16:27
=== _LibertyZero is now known as LibertyZero
bdmurraynigelb: it is written in python16:28
nigelbI wasn't sure ;)16:28
bdmurrayand now you are! ;-)16:28
nigelbheh, thanks16:28
nigelbLets take a look at one of the hooks16:28
nigelbThere are some really simple ones and some really complicated ones in there16:29
nigelbOpen the source_totem.py file16:29
nigelbThat's the hook for totem, the media player16:29
nigelbIts on the default install, so the hook should be in most of your computers16:29
nigelbIn case you don't have the file, head over to http://goo.gl/UUWpt16:30
nigelbtechbreak> can you tell me what actually a hook is ? a bug ? a problem ?16:30
nigelbI figure this question would benefit a common answer.16:31
nigelbA hook is a python script that gets executed when you run ubuntu-bug <packagename>16:31
nigelbSo, we do smart things in the hook like as you questions, run certain processes, gather certain log files, and get them all onto launchpad16:31
=== msnsachin12 is now known as msnsachin
nigelbLets look at the import statements in the totem hook first16:34
nigelbapport.hookutils and apport.packaging are the significant ones16:34
nigelbYou can look at 'pydoc apport.hookutils' and 'pydoc apport.packaging' to see the functions in both these imports16:34
nigelbBasically both of them provide a collection of readymade and safe functions for many commonly used things.16:35
nigelbThere are functions for attaching a file's contents, getting a command's output, grabbing hardware information and much more.16:35
nigelbIn this hook, we start with asking the user a question and providing 3 choices for an answer.16:36
nigelbThe question is "How would you describe the issue?" and the options are "The totem interface is not working correctl", "No sound is being played", "Some audio files or videos are not being played correctly".16:36
nigelbWhile the first one is definitely something to be filed against totem, the other 2 may not be a totem problem.16:37
nigelbI mean, how can you blame the media player if your sound driver itself has a bug ;)16:37
nigelbIf the user selected "No sound is being played", we'd come to "if response[0] == 1:", which means the problem is actually a something to do with audio and not totem, so we open the audio hook.16:37
nigelbthere, we straightfoward use a python function to execute another program16:38
nigelbAnd if the user selected "Some audio files or videos are not being played correctly", we come to if "response[0] == 2:" where we add the gstreamer package info.16:38
nigelbHere we use a function provided by apport to add information about a package16:39
nigelbNow turn your attention to lines 16, 17, and 18.16:39
nigelbThe lines are self explanatory, but I'll take a moment to name those functions16:39
nigelbapport.hookutils.command_output, apport.hookutils.package_versions, and apport.hookutils.read_file16:39
nigelbVery self explanatory and the pydoc command I gave earlier should explain all of these functions16:40
nigelbWith these 3 commands we've added valuable debugging information for the developer.  All this information will be uploaded to launchpad and attached to the bug report.16:40
nigelbAs a developer you'll surely recognize the value of this information.16:40
nigelbThat was a bit of information cramming.  Are there any questions so far?16:40
ClassBottechbreak asked: i just checked /var/log.. but there is neither syslog or partman directory..16:42
nigelberr, sorry16:42
ClassBottechbreak asked: can we edit this .py files if we think it can be better and submit ?16:42
nigelbIn short, yes!16:43
nigelbAll these files belong to a particular package.  Like the source_totem.py in the totem package.16:43
nigelbIf you'd like to help make it better, get the code, open a bug, and submit a patch16:43
bdmurrayreport a bug about the sourcepackage providing the file so in this example totem16:44
nigelbYou can poke bdmurray or me in #ubuntu-bugs and we'd be happy to review and help get it packaged16:44
=== popey_ is now known as popey
nigelbyou can use dpkg S /path/to/file to figureout which package16:44
nigelberr, that was dpkg -S /path/to/file16:45
nigelbOne of my favorite hooks is the new audio hook, http://goo.gl/r4dFW16:45
nigelbDon't get alarmed by its size though16:45
nigelbIt asks good questions and manages to be very friendly in diagnosing audio problems.16:46
nigelbThere are some other neat things you could do with hooks, like add tags to the bug report.16:46
nigelbFor example, if a particular question is answered, you want to add a particular tag16:47
nigelbThis helps reduce the load with triaging16:47
nigelbTo see an example of that, see the cheese hook, http://goo.gl/tsJ6G16:47
nigelbSee line numbers 9, 42, 45, 72-76 for the bits where the tags come into play.16:47
nigelbIf you know python, its kind of simple to read what's done.16:47
nigelbWith the cheese hook tags are added based on symptoms, so the devs have a generic idea of the bugs16:49
=== Quintasan_ is now known as Quintasan
=== dpm_ is now known as dpm
nigelbThere's developer information for Apport available at https://wiki.ubuntu.com/Apport/DeveloperHowTo.16:50
nigelbThere are lots of packages without an apport hook.16:50
bdmurrayWell, that's partially because there are a lot of packages. ;-)16:51
nigelbClearly we've shown how much an apport hook helps get better bug reports for a package16:51
ClassBotThere are 10 minutes remaining in the current session.16:51
nigelbheh, that too ;)16:51
nigelbIf you'd like to write a hook for your own package and need help, feel free to poke either me (nigelb) or Brian Murray (bdmurray) in #ubuntu-bugs.16:51
nigelbSome of the fairly new hooks we've managed over the last few cycles is the rhythmbox book (I wrote that one), cheese hook (kermiac, a fellow bug control member wrote that one), and a few more that I now forget16:52
nigelbah, thanks techbreak.  rhythmbox *hook* :016:53
nigelbI fail at typing :p16:53
nigelbAnyway, that's the end of our session.16:53
nigelbWe'll take questions now :)16:54
nigelbbdmurray: Anything you want to add?16:54
bdmurrayOnce you have bugs reported by apport in Launchpad because the data is in a regular format it is also possible to some automated processing of those bug reports using the Launchpad API.16:55
=== maxb_ is now known as maxb
ClassBotThere are 5 minutes remaining in the current session.16:56
bdmurrayWith the combination of high quality reports and some automatic processing your bug life can become much easier.16:56
nigelband our triaging life too ;)16:56
bdmurrayAnother neat thing about the cheese hook is that it asks you to close cheese so that it gets run in debug mode.16:58
bdmurrayThe possibilities of what you can do with apport really are amazing.16:58
bdmurrayFeel free to ask nigelb or I any questions.  We are always in #ubuntu-bugs.16:59
nigelbok, I guess we're done17:00
nigelbNext up is kim0, the man behind the clouds ;)17:00
kim0Hello Hello everyone o/17:01
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2011/03/04/%23ubuntu-classroom.html following the conclusion of the session.17:01
nigelbKim0 is going to talk about Introducing boto EC2 Cloud API.  kim0, the stage is all yours :)17:01
kim0Thanks nigelb17:01
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Introducing boto EC2 Cloud API - Instructors: kim0
kim0It's really a pleasure to be presenting in UDW17:02
kim0So the topic of the session is "intro to boto ec2 api"17:02
kim0basically what that means is17:02
kim0how to control the Amazon EC2 cloud17:02
kim0from the ease and comfort of your python shell17:02
kim0Please feel free to shoot any questions to me in #ubuntu-classroom-chat17:03
kim0just prepend your questions with QUESTION:17:03
kim0I'll give a few lines intro17:03
kim0since many might not be totally familiar with cloud means17:03
kim0basically, cloud computing has tons of different definitions17:04
kim0however, almost everyone will agree17:04
kim0resources have to be allocated by an api call17:04
kim0and that resource allocation is instantaneuous17:04
kim0and that it should be elastic and almost infinite17:04
kim0Amazon ec2 cloud meets those conditions17:05
kim0so basically17:05
kim0through an api call17:05
kim0you're able to very quickly allocate computing resources17:05
kim0i.e. servers, networking gear, IPs, storage space17:05
kim0you use them for as much as you want17:05
kim0then you simply "delete" them17:05
kim0So in real life17:06
kim0assuming you (as a developer) were tasked with the compute heavy task of say converting 100k text files into PDFs17:06
kim0a "typical" implementation would be to spawn 20 servers in the cloud17:07
kim0kick them crunching on the conversion .. and finish in say 2 hours17:07
kim0then delete that infrastructure!17:07
kim0and yes, you only pay for the used resources (40 hours of compute time)17:07
kim0lovely, isn't it :)17:07
kim0Any questions so far on the general concepts17:08
kim0before I start digging into boto17:08
kim0Ok .. assuming no one has questions17:09
kim0let's get started17:09
kim0the first step would be to install the python-boto package17:09
kim0sudo apt-get install pyton-boto17:10
kim0I also prefer to work in the ipython envrionment17:10
kim0sudo apt-get install ipython17:10
kim0short break .. taking questions17:11
ClassBottechbreak asked: short introduction to urself please.. we wonder who our session master is :)17:11
kim0hi techbreak :) I'm Ahmed Kamal, the ubuntu cloud community liaison17:11
kim0My role is to help the ubuntu cloud community grow and succeed17:11
kim0I always hang-out at #ubuntu-cloud17:12
kim0feel free to ping me anytime17:12
ClassBottechbreak asked: i have seen examples of cloud to be "facebook" too.. how facebook can be a cloud  ?17:12
kim0well yes, FB is considered a cloud app17:13
kim0It is a cloud "application"17:13
kim0not a cloud platform17:13
kim0the likes of Google apps (gmail, gdocs...) facebook ..17:13
kim0are all considered cloud apps17:13
kim0because the data and code are distributed in highly distributed system17:13
kim0I could go into all sorts of details, but that question is a bit offtopic .. feel free to pick it up later :)17:14
ClassBottechbreak asked: ipython ? iron ptyhon ?17:14
kim0ipython is "interactive python shell" afaik17:14
kim0ok .. assuming you're all set17:14
kim0→ back to boto17:15
=== msnsachin12 is now known as msnsachin
kim0In order to actually execute the steps here .. you'd need to have an amazon ec2 account17:15
kim0setup and have generated secret keys and stored your variables in ~/.ec2/ec2rc17:15
kim0this is outside the scope of this tutorial however17:16
kim0for those interested17:16
kim0follow along with https://help.ubuntu.com/community/EC2StartersGuide17:16
kim0If you spot any wrong info, let me know17:16
kim0In all examples, I will copy/paste17:16
kim0the api calls and the results17:16
kim0so that everyone can follow along easily17:17
kim0$ ipython17:17
kim0we're now inside the ipython interperter17:17
kim0import boto17:17
kim0the boto python module is imported (ready to be used)17:17
kim0The Amazon cloud is composed of multiple regions17:17
kim0similar to "data centers" all around the world17:17
=== ampelbein_ is now known as Ampelbein
kim0we need to pick one to connect to17:18
kim0let's see how to do that17:18
kim0from boto import ec217:19
kim0regions = ec2.regions()17:19
kim0 RegionInfo:us-east-1,17:19
kim0 RegionInfo:ap-northeast-1,17:19
kim0 RegionInfo:us-west-1,17:19
kim0 RegionInfo:ap-southeast-1]17:19
kim0What you see are the Amazon regions (data-centers) around the world17:19
kim0we'll pick the one in us-east-1 to work with and connect to!17:19
kim0>> useast = regions[1]17:20
kim0I will prepend all python input code with (>>) to make it easily distinguishable17:20
kim0 u'ec2.us-east-1.amazonaws.com'17:21
kim0Let's connect17:21
kim0>> useconn = useast.connect()17:21
kim0we're now connected17:22
kim0let's do something useful17:22
kim0by default .. Amazon configure its cloud firewall17:22
kim0to block all incoming port connections17:22
kim0the rule-sets .. are called "secutiy groups" in its jargon17:22
kim0let's get a list of security groups available17:23
kim0>> useconn.get_all_security_groups()17:23
kim0Out[14]: [SecurityGroup:default]17:23
kim0the result is a single group called "default" ... makes sense!17:23
kim0just a little note, for anyone trying to setup a new account with amazon, you're gonna need a credit card17:25
kim0while they offer a completely free instance (micro type) free for a year17:26
kim0i.e. you most likely won't be charged anything .. but you still need a valid one17:26
kim0try to follow along with me in the session, I'll be pasting all input on output17:26
kim0back on track17:26
kim0so let's get our security group (firewall rule)17:26
kim0let's "open" port 2217:27
kim0that's for ssh17:27
kim0>> sg.authorize('tcp', 22, 22, '')17:27
kim0Ok ..17:28
kim0so let's quickly recap17:28
kim0what we've done17:29
kim0we've enumerated amazon cloud datacenters .. and chose to connect to the one in us-east17:29
kim0and we're manipulated the firewall to open port 2217:29
kim0all using API calls .. all on-demand and elastic17:29
kim0let's start the really cool stuff :)17:30
kim0let's start our own cloud server17:30
kim0a little intro17:30
kim0Ubuntu created official ubuntu cloud images, and publishes them to the amazon cloud17:30
kim0each published image is called AMI17:30
kim0Amazon Machine Image17:30
kim0and each AMI .. has its own "id" .. which is like a long number identifying it17:31
kim0when you want to start a new cloud server, you tell amazon what ami you want to use .. then it clones that ami and starts an "instance" of that ami for you!17:31
kim0so let's do that17:31
kim0>> ubuimages=useconn.get_all_images(owners= ['099720109477', ])17:32
kim0note that useconn .. is the us-east connection we had setup17:32
kim0get_all_images() is the call to get a list of images from amazon17:32
kim0the "owners=['099720109477', ]" part .. is basically a filter .. that number is the ID for Canonical .. so that you only get official ubuntu images17:32
kim0while you can start using fancy code to filter the huge list17:33
kim0of images to what you want!17:33
kim0You could use code like17:33
kim0nattymachines = [ x for x in ubuimages if (x.type == 'machine' and re.search("atty", str(x.name))) ]17:33
kim0I prefer a simpler approach17:33
kim0Visit the Ubuntu cloud portal17:34
kim0this page shows a listing of all publicly available ubuntu images17:34
kim0You just use the search box on the top right to search for what you want17:34
kim0In my case, I searched for "us-east natty"17:35
kim0the ami ID is shown in the table and you can simply copy it!17:35
kim0For me it's    ami-7e4ab91717:35
kim0so let's filter the list using that ID17:36
kim0>> natty = [ x for x in ubuimages if x.id == 'ami-7e4ab917' ][0]17:36
kim0>>  natty.name17:36
kim0Out[22]: u'ebs/ubuntu-images-milestone/ubuntu-natty-alpha3-amd64-server-20110302.2'17:36
kim0voila .. as you can see17:36
kim0it's a natty image .. alpha3!17:36
kim0hot from the oven :)17:36
kim0Let's go ahead and start a server17:37
kim0>> reservation = natty.run(key_name='default',instance_type='t1.micro')17:37
kim0natty.run() starts an image17:37
kim0the key_name .. is your ssh key .. this is part of setting up your Amazon ec2 account17:37
kim0that key is injected into the ubuntu instance as it boots, so that you're able to ssh into it later17:38
kim0The instance_type parameter .. is the "size" of the server you want17:38
kim0in my case, I'm starting the smallest one .. micro17:38
kim0since I'm executing this live17:38
kim0the server must have been created right now17:38
kim0in a matter of seconds17:39
kim0the API call17:39
kim0returns as "reservation"17:39
kim0let's interrogate that17:39
kim0>> instance = reservation.instances[0]17:40
kim0Let's see if the server is ready17:40
kim0>>  instance.state17:40
kim0Out[26]: u'pending'17:40
kim0oh .. that's interesting17:40
kim0state pending means it's still being allocated17:40
kim0any questions so far ?17:40
kim0now is a good time while amazon allocates the instance :)17:41
kim0not that it takes more than a few seconds actually17:41
kim0it's ready17:41
kim0>> : instance.update()17:41
kim0Out[28]: u'running'17:41
kim0The serer has been created, booted, my ssh key "default" injected into it17:42
kim0how do we login you say17:42
kim0let's ask about the serer's name17:42
kim0>>  instance.public_dns_name17:42
kim0Out[29]: u'ec2-184-72-132-193.compute-1.amazonaws.com'17:42
kim0I can now ssh into that Ubuntu cloud server just like that17:43
kim0ssh ubuntu@ec2-184-72-132-193.compute-1.amazonaws.com17:43
kim0If I had used a different ssh key, I would nice ssh "-i" parameter .. but I'm using my default "~/.ssh/id_rsa" .. so no need to do anything17:44
kim0I've just configured the server to allow17:46
kim0you guys to ssh into it17:46
kim0Go ahead17:46
kim0ssh session@ec2-184-72-132-193.compute-1.amazonaws.com17:46
kim0password: session17:47
kim0please don't do anything nasty :)17:47
kim0Once logged in .. feel free to start byobu17:47
kim0a nice colorful gnu/screen customization17:47
kim0I'm ready to take some questions17:47
ClassBotranamalo asked: when new packages are released are they incorporated in the ubuntu ami's?  Like if openssh is currently 5.3 and 5.4 is released today, if fire up the ubuntu ami tomorrow will i have 5.4 installed?17:49
kim0ranamalo: Well, with package being updated17:49
kim0new AMIs are pushed17:49
kim0remember that AMI-ID we got   ami-7e4ab91717:50
kim0that we got from cloud.ubuntu.com/ami17:50
kim0every couple of weeks or so17:50
kim0updates will be pushed17:50
kim0and a new image will be created17:50
kim0if you're running an older image .. there's nothing preventing you from apt-get dist-upgrade 'ing it17:50
ClassBotThere are 10 minutes remaining in the current session.17:51
kim0this is espeically true if you're running natty or a recent maverick (pvgrub booted instance) .. not too important for now17:51
ClassBottechbreak asked: if you are copy pasting can you link us to the python code ? so that we can have the code and you can explain one by one /17:52
kim0Here you are17:52
kim0That's all the commands I've written so far17:52
kim0you can practice on your own later17:52
kim0and if you need any help .. everyone at #ubuntu-cloud is more than helpful (at least I hope so) :)17:53
ClassBotmhall119 asked: does boto work on UEC as well?17:54
kim0mhall119: yes it does AFAIK17:54
kim0UEC is Ubuntu Enterprise Cloud17:54
kim0it's a private cloud product17:54
kim0that you can use to run your own cloud (like Aamzon)17:54
kim0on your own hardware17:54
kim0It is based on the eucalyptus open source project17:54
kim0for more info on using boto with UEC .. check out this link http://open.eucalyptus.com/wiki/ToolsEcosystem_boto17:54
ClassBotranamalo asked: what advantages are there to using boto over ec2-ami-tools and ec2-api-tools?17:55
ClassBotThere are 5 minutes remaining in the current session.17:56
kim0ranamalo: well, you can use command line tools in those packages17:56
kim0to effectively do the same thing17:56
kim0however the benefit of using python bindings17:56
kim0is clear .. if you're writing a tool17:56
kim0or some program17:56
kim0running external commands17:56
kim0and parsing results from the stdout text17:56
kim0is effectively hell17:56
kim0for programmers17:56
kim0an API provides a consistent clean interface17:57
ClassBotakshatj asked: What would be the advantages of deploying dmedia( https://launchpad.net/dmedia ) on clous?17:57
* kim0 checking that out17:57
kim0akshatj: I'm not familiar with that project17:58
kim0however the generic advantages would be17:58
kim0you don't worry about hardware17:58
kim0you don't manage the infrastrucutre17:58
kim0you can scale-up/down easily cheaply17:58
ClassBotranamalo asked: Is there a howto url you can give us?17:58
* kim0 racing to answer :)17:59
kim0howto url for ?17:59
kim0a boto howto17:59
kim0well .. nothing special .. just googling you'll find tons of stuff17:59
kim0many useful info on the wiki18:00
kim0like https://help.ubuntu.com/community/UEC18:00
kim0If you're interested in learning more or contributing18:00
kim0ping me anytime18:00
kim0on #ubuntu-cloud18:00
kim0Thanks everyone18:00
kim0hope this was useful18:00
kim0don't forget to terminate your instances18:00
kim0or you keep paying for them :)18:01
kim0bye bye18:01
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Introduction to Django Development - Instructors: lukasz
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2011/03/04/%23ubuntu-classroom.html following the conclusion of the session.18:01
lukaszHello everybody, my name is Łukasz Czyżykowski, I'm part of ISD (Infrastructure Systems Development) team at Canonical. This will be a short introduction for creating web applications with Django framework.18:01
lukaszI assume that everybody is using Maverick and have Django installed. If not then:18:02
lukasz$ sudo apt-get install python-django18:02
lukaszwill do the trick.18:02
lukaszbtw, if I'll be going too fast or something is unclear do not hesitate to ask18:03
lukaszThis is last stable version of Django. All documentation for it can be found at http://docs.djangoproject.com/en/1.2/ .18:03
=== cjohnston_ is now known as cjohnston
lukaszNow it's time to start coding. Or at least start working on the project. In the beginning we need to create a Django project. This something which, in theory, should be connected to the site.18:03
lukaszFor the purpose of this tutorial we'll build simple web application, we'll use most bits of Django. Our app will be partial Twitter/status.net clone.18:04
lukaszAll code for this project is accessible at https://launchpad.net/twitbuntu, you can either download it and look at revisions which moves app forward in (almost) the same way as this session is planned or you can only follow irc session as all required code will be presented here.18:04
=== msnsachin12 is now known as msnsachin
lukaszSo, the first step is to create Django project:18:04
lukasz$ django-admin startproject twitbuntu18:04
lukasz$ cd twitbuntu18:04
ClassBothugohirsch asked: will the sources be available somewhere later? (in case I'm not fast enough to get a database up'n'running)18:06
lukaszYes, as I mentioned earlier the code is already on Launchpad18:06
lukaszProject is container for database connection settings, your web server and stuff like that.18:06
lukaszNow twitbuntu contains some basic files:18:06
lukasz- manage.py: you'll use this script to invoke various Django commands on this project,18:06
lukasz- settings.py: here are all settings connected to your project,18:07
lukasz- urls.py: mapping between urls of your application and Python code, either created by you or already existing18:07
lukaszand the last one18:07
lukasz- __init__.py: which marks this directory as Python package18:07
lukaszNext is setting up the database18:07
lukaszOpen settings.py file in your favourite text editor.18:07
lukaszFor purpose of this tutorial we'll use very simple sqlite database, it holds all of its data in one file and doesn't require any fancy setup. Django can of course use other databases, MySQL and PostgreSQL being most popular choices.18:07
lukaszModify your file so that DATABASE setting looks exactly like this: http://pastebin.ubuntu.com/575582/18:08
lukaszTo test that those settings are correct we'll issue syncdb management command. It creates any missing tables in the database which in our case is exactly what we want to get:18:08
lukasz$ ./manage.py syncdb18:08
lukaszIf everything went right you should see bunch of "Creating table" messages and query about creating superuser. We want to be able to administer our own application so it's good to create one. Answer yes to first question and proceed with others18:09
lukaszMy answers to those questions are:18:09
lukasz(just if anybody wonders)18:09
lukaszWould you like to create one now? (yes/no): yes18:09
lukaszUsername (Leave blank to use 'lukasz'): admin18:09
lukaszE-mail address: admin@example.com18:09
lukaszPassword: admin18:09
lukaszPassword (again): admin18:09
lukaszEmail address is not too important at that stage18:10
lukaszlater you can configure Django to automatically receive crash reports on that address, but that's something bit more advanced.18:10
lukaszNext bit is to create an application, something where you put your code.18:10
lukaszBy design you should separate different site modules into their own applications, that way it's easier to maintain it later and also if you create something which can be usable outside of your project you can share it with others without necessary putting all of your project out there.18:12
lukaszIt's pretty popular in Django community, so it's always good idea to check somebody already haven't created something useful. That way you can save yourself reinventing the wheel.18:12
lukaszFor this there's startapp management command18:12
lukasz$ ./manage.py startapp app18:12
lukaszIn this simple case we're calling our application just 'app', but normally it should be called something more descriptive. Something like 'blog', 'gallery', etc. In out case, it could be called 'updates'.18:13
lukaszThis creates an 'app' directory in your project. Inside of it there are files created for you by Django.18:13
lukasz- models.py: is where your data model definitions go,18:13
lukasz- views.py: place to hold your views code.18:13
lukaszSome short clarification with naming.18:14
lukaszDjango is (sort of) Model/View/Controler framework18:14
lukaszThe idea is that your application into separate layers. But in case of Django the naming of the standard and what creators did is bit confusing18:15
lukaszModels are called as they should.18:15
lukaszViews are templates in Django18:15
lukaszand Controllers are called view functions.18:15
lukaszok, quick break for questions18:15
ClassBotwolfrage76 asked: Is it possible to setup Django to use more than one database, for different sections of the site? For instance SQlite as default for the site, but MySQL for the forums?18:16
lukaszwolfrage76: Yes, you can do that. The details (as this is bit more advanced topic) are in the documentaion.18:16
ClassBotabhinav asked: what is a superuser ? a database admin ?18:16
lukaszabhinav: it's an admin for whole web application, it's separate from database administrator18:17
lukaszabhinav: basically, this user can access Django admin and do anything there18:17
lukaszFirst layer are models, where data definitions lies. That's the thing you put into models.py file. You define objects your application will manipulate.18:18
lukaszNext bit is to add this new application to list of installed apps in settings.py, that way Django knows from which parts your project is assembled.18:19
lukaszIn settings.py file find variable named INSTALLED_APPS18:19
lukaszAdd to the list: 'twitbuntu.app'18:19
lukaszIt should look like that:18:19
lukasz   INSTALLED_APPS = (18:19
lukasz     'django.contrib.auth',18:19
lukasz     'django.contrib.contenttypes',18:19
lukasz     'django.contrib.sessions',18:19
lukasz     'django.contrib.sites',18:19
lukasz     'twitbuntu.app',18:19
lukasz   )18:19
lukaszor pastebin: http://pastebin.ubuntu.com/575583/18:19
lukaszYou can see that there are already things here, mostly things which give your project some out-of-the-box funcionality18:20
ClassBotchadadavis asked: judging by the tables created, users and authentication are built in. I.e. it doesn't require any external modules (as Catalyst does)?18:20
lukaszchadadavis: yes, the authentication is build in18:21
lukaszNames are pretty descriptive so you shouldn't have problem with figuring out what each bit does18:21
lukaszalthough contenttypes and sites can be bit confusing18:21
lukaszas those are bits of underlying machinery required by most of the other django addons18:21
ClassBotchadadavis asked: my settings.py also has 'django.contrib.messages' (Natty). Is that going to cause any problems?18:22
lukaszchadadavis: not a problem18:22
lukaszall the defaults are good to go18:22
lukaszNow we start making actual application. First thing is to create model which will hold user updates. Open file app/models.py18:22
lukaszYou define models in Django by defining classes with special attributes. That can be  translated by Django into table definitions and create appropriate structures in database.18:22
lukaszFor now add following lines to the end of the models.py file: http://paste.ubuntu.com/575584/18:23
lukaszNow some explanations. You can see that you define model attributes by using data types defined in django.db.models module18:24
lukaszFull list of types and options they can take is documented here: http://docs.djangoproject.com/en/1.2/ref/models/fields/#field-types18:24
lukaszForeignKey bit links our model with User model supplied by Django that way we can have multiple users having their updated on our site18:24
lukaszclass Meta bit is place for settings for whole model. In this case we are saying that whenever we'll get list of updates we want them to be ordered by create_at field in ascending order (by default order is descending, and '-' means reversing that order).18:25
lukaszNow we have to synchronize data definition in models.py with what is in database. For that we'll use already known command: syncdb18:26
lukasz$ ./manage.py syncdb18:26
lukaszYou should get following output:18:26
lukaszCreating table app_update18:26
lukaszInstalling index for app.Update model18:26
lukaszAs you can see each table name have two parts: the app name and model name.18:26
lukaszGreat thing about Python is it's interactive shell. You can easily use it with Django.18:27
lukaszBut because of bit of setup django requires there's a shortcut of setting up proper environment within your project18:27
lukasz$ ./manage.py shell18:27
lukaszThis runs interactive shell configured to work with your project. From here we can play with our models and create some updates.18:27
=== Ptivalternative is now known as Ptival
lukaszfirst we get the user we created when first running syncdb18:28
lukasz>>> from django.contrib.auth.models import User18:28
lukasz>>> admin = User.objects.get(username='admin')18:28
lukaszHere 'admin' is whatever you've chosen when asked for admin username.18:28
lukaszFirst thing is to get hold to our admin user, because every update belongs to someone. You can see that we used 'objects' attribute of model class.18:29
lukasz>>> from twitbuntu.app.models import Update18:29
lukasz>>> update = Update(owner=admin, status="This is first status update")18:29
lukaszAt that point we have instance of the Update model, but it's not saved in the database you can see that by checking update.id attribute18:29
lukaszCurrently it's None18:29
lukaszbut when we save that object in the database18:29
lukasz>>> update.save()18:30
lukaszthe update.id attribute has a value18:30
lukasz>>> udpate.id18:30
lukaszThat's only one of many ways to create instances of the models, this one is the easiest one.18:30
lukaszWhen we have some data in the database there's time to somehow display it to the user.18:30
lukaszFirst bit for a view to work is to tell Django for which url such view should respond to.18:31
lukaszFor that we have to modify urls.py file.18:31
lukaszOpen it and add following line just under line with 'patterns' in it, so whole bit should look like that:18:31
lukaszurlpatterns = patterns('',18:31
lukasz    (r'^$', 'twitbuntu.app.views.home'),18:31
lukaszFirst bit there is regular expression for which this view will respond, in our case this is empty string (^ means beginning of the string and $ means end, so there's nothing in it), second bit is name of the function which will be called.18:31
lukaszNow open app/views.py file. Here all code responsible for responding to users' requests will live.18:32
lukaszFirst bit is to import required bit from Django:18:32
lukaszfrom django.http import HttpResponse18:32
lukaszNow we can define our (very simple) view function:18:32
lukaszdef home(request):18:32
lukasz    return HttpResponse("Hello from Django")18:32
lukaszAs you can see every view function has at least one argument, which is request object18:33
lukaszIt contains lots of useful information about request, but for our simple example we'll not use it.18:33
ClassBotchadadavis asked: Is that an instance of the *model* or a record in the update table?18:33
lukaszchadadavis: both18:33
lukaszsaved instances are records in the database18:33
lukaszbut you access all data on that record as convenient python attributes on that object18:34
lukaszAfter that we can start our app and check if everything is correct, to do that run:18:34
lukasz$ ./manage.py runserver18:34
lukaszIf everything went ok you should see following output18:34
lukaszValidating models...18:34
lukasz0 errors found18:34
lukaszDjango version 1.2.3, using settings 'twitbuntu.settings'18:34
lukaszDevelopment server is running at
lukaszQuit the server with CONTROL-C.18:34
lukaszNow you can access it at provided url18:35
lukaszWhat you should see is "Hello from Django" text.18:35
lukaszany questions/problems/comments?18:35
lukaszIt would be nice to be able to log in to our own application, fortunately Django already has required pieces inside and only thing left for us is to hook them up.18:36
lukaszAdd following two lines to the list of urls:18:36
lukasz(r'^accounts/login/$', 'django.contrib.auth.views.login'),18:37
lukasz(r'^accounts/logout/$', 'django.contrib.auth.views.logout'),18:37
lukaszNext we need to create template directory and enter it's location in settings.py file18:37
lukasz$ mkdir templates18:37
lukaszIn settings.py file find TEMPLATE_DIRS setting:18:38
lukaszimport os18:38
lukaszTEMPLATE_DIRS = (18:38
lukasz    os.path.join(os.path.dirname(__file__), 'templates'),18:38
lukaszThis will ensure that Django can always find the template directory even if current working directory is not the one containing application (for example when run from Apache web server).18:38
lukaszNext is to create registration dir in templates directory and put there login.html file with following content: http://paste.ubuntu.com/575631/18:38
lukaszLast bit is to set up LOGIN_REDIRECT_URL in settings.py to '/':18:39
lukaszLOGIN_REDIRECT_URL = '/'18:39
lukaszThat way after login user will be redirected to '/' url instead of default '/accounts/profile' which we don't have.18:39
lukaszNow getting to should present you the login form and you should be able to log in to application.18:39
lukaszNow it's time to use information about logged in user in our view.18:40
lukaszDjango provides very convenient way of accessing logged in user by adding 'user' attribute to request object.18:40
lukaszIt's either model instance representing logged in user or instance of AnonymousUser class which have same interface as model.18:40
lukaszEasiest way distinguishing between them is by using user.is_authenticated() method18:41
lukaszModify our home view function so it looks like that: http://paste.ubuntu.com/575585/18:41
lukaszThat way logged in users will be greeted and anonymous users will be sent to login form. You should see "Hello username" at
lukaszUsing that information we can build a functionality to restrict access to some parts of an application.18:42
lukaszFortunately Django already has a lot of stuff build for that purpose.18:42
lukaszAdd following line to the top of the views.py file:18:42
lukaszfrom django.contrib.auth.decorators import login_required18:42
lukaszThis decorator does exactly what we have done manually but it's less code which doesn't hides what this view is doing, now we can shorten it to: http://paste.ubuntu.com/575586/18:43
lukaszTest view in your browser, nothing should have changed18:43
lukaszNow when we have reliable way of getting to the user instance we can return all user's updates.18:43
lukaszWhen creating an Update model we have used ForeignKey type, this connects two models together.18:44
lukaszLater when we've created updates we used user instance as value of this attribute.18:44
lukaszThat's one way of accessing this data (every update has owner attribute).18:44
lukaszDue to usage of ForeignKey pointing to User model every instance of it got also update_set attribute which contains every update which is assigned to this user.18:44
lukaszClean way of getting all user updates is:18:44
lukasz>>> admin.update_set.all()18:45
lukasz[<Update: Update object>]18:45
lukaszBut we can also get to the same information from Update model:18:45
lukasz>>> Update.objects.filter(owner=admin)18:45
lukasz(btw, those are only examples, you don't have to type them)18:45
lukaszBoth of those will return the same data, but the first one is cleaner.18:45
lukaszThat's just a very simple example of getting data from the database.18:46
lukaszDjango's functionality in that regard is way more sophisticated, but we don't have time now to dive into that.18:46
lukaszNow when we know how to get to necessary data we can send it to the browser by modifying home function: http://paste.ubuntu.com/575587/18:46
lukaszHere we set the content type of the response to text/plain so we can see angle brackets in the output, without that, by default, browser would hide it.18:47
lukaszNow, when we have data we can work on spicing it up a little. For that we'll use templates.18:47
lukaszTemplates in Django have it's own syntax, it's really simple as it was created for designers, people not used to programming languages.18:47
lukaszWe already have templates configured due to requirements of auth system, so it will be very easy to get started.18:47
ClassBothugohirsch asked: I'm too slow to follow .... get an error msg: TemplateDoesNotExist at /accounts/login/. Looking for a file in /home/hirsch/twitbuntu/templates/registration/login.html - how can I remove the registration thing?18:48
lukaszhugohirsch: sorry for being too fast18:48
lukaszbasically you can't, that's hardcoded in the auth application itself18:48
lukaszthat's how the templates are looked up, usually they are specified as apptemplatedir/templatename.html18:49
lukaszso registration templates are in registration/ directory18:49
lukaszadmin templates land in admin/ dir, etc18:49
lukaszAny other problems?18:50
lukaszI'll gladly help to resolve any issues18:50
ClassBotThere are 10 minutes remaining in the current session.18:51
lukaszok, continuing18:53
lukaszNow we need a file for a template18:54
lukaszcreate template/home.html and put following content in it: http://paste.ubuntu.com/575588/18:54
lukaszEvery tag in Django templates language is contained between {% %} elements and also ending of every opening thing is done by adding end(thing) to the end (like endfor in that case).18:54
lukaszTo output content of the variable we're using {{ }} syntax.18:54
lukaszAlso we can use something called filters by using | to pass value through the named filter. We're using that to format date to nice text description of time passed.18:54
lukaszThat's template, now let's write view code to use it.18:54
lukaszThere's very convenient function when using templates in views: render_to_response18:55
lukaszadd following line to the top of the view.py file18:55
lukaszfrom django.shortcuts import render_to_response18:55
lukaszThis function takes two arguments: name of the template to render (usually it's file name) and dictionary of arguments to pass to template. Having this in mind our home view looks like that: http://paste.ubuntu.com/575589/18:55
ClassBotThere are 5 minutes remaining in the current session.18:56
lukaszNow running $ ./manage.py runserver you can see that page in the browser has proper title18:56
lukaszI guess we don't have enough time for the rest of the things I've planned18:56
lukaszwe'll stop here18:56
lukaszAre there any questions?18:56
lukaszok, going forward, going fast18:57
lukaszIt would be really nice to be able to add status updates from the web page. For that we need a form. There are couple ways of doing that in Django, but we'll show a way which is most useful for forms which are used to create/modify instances of the models.18:58
lukaszBy convention form definitions goes to forms.py file in your app directory. Put following bits in there: http://paste.ubuntu.com/575590/18:58
lukaszThis is very simple form which has only one field in it.18:58
lukaszNow in views.py we need to instantiate this form and pass it to the template. After modifications this file should look like this: http://paste.ubuntu.com/575591/18:58
lukaszOne thing which is new here, the RequestContext thing. This is connected to automatic CSRF (cross site request forgery) protection, which Django enables by default. Basically it provides templates with richer set of accessible data from which we'll going to use only csrf_token tag.18:58
lukaszLast bit is to display this form in template. Add this bit just after <body> tag:18:59
lukaszNow when we have form properly displayed it would be useful to actually create updates based on the data entered by the user. That requires little bit of work inside our home view. Fortunately this is pretty straightforward to do: http://paste.ubuntu.com/575594/18:59
lukaszFirst thing is to check weather we're processing POST or GET request, if POST that means that user pressed 'Update' button on our form and we can start processing submitted data.18:59
lukaszAll POST data is conveniently gathered by Django in a dictionary in request.POST. For this case it's not really critical to know what exactly is send, UpdateForm will handle that. Bit with instance= is to automatically set update owner, without that form would not be valid and nothing would be saved in the database.18:59
lukaszChecking if form is valid is very simple, just invoke .is_valid() method on it. If True is returned then we're saving the form to the database, which returns Update instance. It's not really needed anywhere but I wanted to show you that you can do something with it.19:00
lukaszLast bit is to create empty form, so that Status field will be clear, ready for next update.19:00
lukaszIf you try to send update without any content you'll see that there's an error message displayed 'This field is required'. All of that is automatically handled by forms machinery.19:00
lukaszIt's nice to be able to see our own status updates but currently it's only viewable by logged user.19:00
lukaszbut that's a homework19:00
lukaszor a thing to look into existing code19:00
lukaszthank you for your attention :)19:00
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2011/03/04/%23ubuntu-classroom.html following the conclusion of the session.19:01
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Getting started with daily builds in Launchpad - Instructors: Quintasan
QuintasanThanks lukasz!19:01
QuintasanSo, hi there people. My name is Michał Zając I am a Kubuntu Developer, MOTU and leader of (not famous yet :) Project Neon.19:02
Quintasanand today I will be talking about Recipes (or Source Builds)  in Launchpad19:02
QuintasanWe are going to use pbuilder and Launchpad and you should already have those thing if you were at  "Getting Started with Development" by dholbach19:03
QuintasanI think most people have an idea what {daily,weekly,montly} builds are, if not then here's a quick explanation: we grab code from code repository the project uses, build it and release it as packages19:05
QuintasanYou probably get the idea that doing that manually every day would be a little annoying at least so our ingenious Launchpad developers introduced the Recipes feature so we can focus more on testing that on writing complicated scripts or doing the builds by hand19:07
QuintasanWhy should you bother with setting up source builds? Well, testing bleeding edge software goes faster because the packages are very quickly available19:09
QuintasanGetting testers is easier too because they just add a PPA instead of compiling the whole source themselves19:09
QuintasanAny questions so far?19:10
QuintasanOkay, so let's get proceed.19:11
QuintasanWhat do you need to do, to set up your daily builds on Launchpad?19:12
Quintasan1. You need to have your source code on Launchpad (either use code.launchpad.net for developing or request a source import)19:12
Quintasan2. Write a recipe19:13
Quintasan3. Test build it locally (we don't want to stuff Launchpad with failing builds, do we?)19:13
Quintasan4. Upload and trigger the recipe19:13
QuintasanWell, I forgot, you also need to have a working packaging for that certain software, that is very important19:14
QuintasanSo now we're going through steps 2 and 3 beacuse they are essential and setting up a recipe is really easy so I will show that later19:16
QuintasanSo, go to you working directory and do19:17
Quintasanbzr branch lp:~neon/project-neon/kdewebdev-ubuntu19:17
QuintasanThat's our packaging branch for kdewebdev module, and it's responsible for getting our code compiled and put into packages19:18
Quintasanand if you go to19:19
QuintasanYou can see the already imported code from KDE to Launchpad which we are going to use to get a source build of kdewebdev19:19
QuintasanNow we are going to write a recipe, so fire up your favorite text editor19:20
Quintasanand paste in the following19:20
Quintasan# bzr-builder format 0.2 deb-version 2+svn{date}+r{revno}-{revno:packaging}19:20
Quintasannest packaging lp:~neon/project-neon/kdewebdev-ubuntu debian19:20
QuintasanThe first line tells bzr builder how is the versioning of the package going to look19:21
=== Daviey- is now known as Daviey
Quintasanthe stuff between { and } is going to expand to19:22
Quintasan{date} to date - like 2011030119:22
Quintasan{revno} to revision number of the source so it's also going to be a number like 167719:23
Quintasanand {revno:packaging} will be substituted with the revno for the branch named packaging in the recipe.19:23
Quintasanlp:~neon/kdewebdev/trunk <--- this tells the builder to grab the source from ~neon/kdewebdev/trunk branch19:24
Quintasanabhinav: the recipe file can have any name, though I usually name it <project>.recipe19:25
Quintasannest packaging lp:~neon/project-neon/kdewebdev-ubuntu debian19:26
QuintasanThis line places our packaging in source directory in debian/19:26
QuintasanPlease note that the lp:~neon/project-neon/kdewebdev-ubuntu doesn't have debian folder but it's contents19:27
QuintasanOtherwise the packaging would land under ./debian/debian and LP wouldn't be able to build it19:27
QuintasanNow save the file and we are going to test build it19:28
QuintasanLaunch a terminal and go the the directory where you saved the recipe file19:28
Quintasanmake another directory called "build" for example19:29
Quintasanhmm, we are actually going to need bzr-builder19:29
Quintasansudo apt-get install bzr-builder19:29
Quintasanshould install it19:29
QuintasanAny questions so far?19:30
QuintasanWell, moving on, assuming you have a working pbuilder we have to make a small change to sources.list inside it so we can build it as it pull project-neon libs. Be sure to revert the change after the session19:34
Quintasansudo pbuilder --login --save-after-login <--- that will login into you pbuilder chroot and save any changes you made after exiting19:34
Quintasanyou will have to add two entries to /etc/apt/sources.list inside your pbuilder19:35
Quintasanso open it up for editing and paste19:36
Quintasandeb http://ppa.launchpad.net/neon/ppa/ubuntu natty main19:36
Quintasandeb-src http://ppa.launchpad.net/neon/ppa/ubuntu natty main19:36
Quintasansubstitue natty for maverick if you have a maverick pbuilder19:36
Quintasansave the file and exit the pbuilder19:36
Quintasansorry, if you do not use pbuilder hooks then do "apt-get update" after adding the entries19:37
Quintasannow, back to the recipe directory19:38
Quintasanissue the following command19:38
Quintasanbzr dailydeb <your recipe file> <build directory we created earlier>19:39
Quintasanhere it looks like: bzr dailydeb kdewebdev.recipe build19:39
QuintasanWhat it is going to is to grab the source code, stuff the packaging inside it and create a dsc file which you can build with pbuilder19:40
Quintasanafter it finishes it work you can build it with pbuilder like this19:43
Quintasansudo pbuilder --build build/*.dsc19:44
QuintasanI just finished building it and it should work for you too.19:44
Quintasannow that we know the recipe is working we can put it up on Launchpad19:45
QuintasanTo be able to use Recipes you need to add your launchpad account into Recipe beta users team19:46
QuintasanIt's an open team so anyone can join19:46
QuintasanNow what we want to do is to go to the branch with the source code which we are going to use for daily building19:47
Quintasanin this case19:48
QuintasanIf you joined the recipe beta users team you should see "1 recipe using this branch."19:48
Quintasanclicking the "1 recipe" link will redirect you to https://code.launchpad.net/~neon/+recipe/project-neon-kdewebdev19:49
QuintasanYou can see Latest builds section and Recipe contents which contains the exact recipe I gave you19:50
QuintasanAs you can see there are some successful build19:50
QuintasanNow if you were setting a new daily build then you would click the "Create packaging recipe" button on https://code.launchpad.net/~neon/kdewebdev/trunk19:51
ClassBotThere are 10 minutes remaining in the current session.19:51
QuintasanSet the description and Name fields to you liking19:52
QuintasanThe Owner field says who can manage the recipe in Launchpad19:52
QuintasanThe Built daily field has a nice explanation under it: Automatically build each day, if the source has changed.19:53
QuintasanAnd we have to select to which PPA we are going to push the packages19:53
QuintasanYou can use an existing one or create a new one19:53
QuintasanLater you can set the series for which the package will be built, like natty, maverik, lucid and so on up to Dapper19:54
QuintasanIn the last field you paste the recipe you wrote and click Create Recipe19:54
=== AlanChicken is now known as AlanBell
QuintasanYou should be redirected to you recipe page where you can manually trigger the first build by pressing the Request build(s) link under Latest builds section19:55
ClassBotThere are 5 minutes remaining in the current session.19:56
QuintasanIf you did everything correctly then it should start building and place the resulting packages in selected PPA19:56
QuintasanI'm done, you can find more information about Source Builds at Launchpad Help -> https://help.launchpad.net/Packaging/SourceBuilds19:57
QuintasanYou can also find me on #project-neon and #kubuntu-devel channels if you need more explanations19:57
QuintasanOh, and there is also a list (not full probably) of existing Daily Builds that are set up on Launchpad19:58
Quintasanyou can find it on -> https://wiki.ubuntu.com/DailyBuilds/AvailableDailyBuilds19:58
QuintasanWell, we are almost out of time and I'm already done, if you have any questions then ask them in #ubuntu-classroom-chat or find me on the channels I mentioned19:59
=== james_w` is now known as james_w
QuintasanThanks for listening, hope to see some new builds after this session20:00
yofelhere's a more complete list: https://code.launchpad.net/+daily-builds which shows all existing daily build recipes20:01
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Project Lightning Talks - Instructors: stgraber, UndiFineD, kirkland, AlanBell, mhall119, jderose, yofel, Quintasan
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2011/03/04/%23ubuntu-classroom.html following the conclusion of the session.20:01
nigelbok, hello again!20:01
nigelbThis time we're having somethign special for Ubuntu Developer Week20:02
nigelbWe're going to close with project lightning talks20:02
nigelbWe have a few people going to come on and talk about their project for about 5 minutes20:02
nigelbThey will tell you all about it and how you can help them with the project20:02
nigelbFirst up is stgraber!20:03
* stgraber waves20:03
nigelbHe'll talk to you abour arkrose20:03
nigelbAll yours stgraber :)20:03
stgraberHey everyone !20:03
stgraberSo I just wanted to quickly introduce you to a pet project of mine called arkose20:03
stgraberArkose's goal is to do sandboxing of desktop applications20:03
stgraberwith it you can easily start any binary in a sandbox and choose what kind of acces it has20:04
=== highvolt1ge is now known as highvoltage
stgraberthis includes, forcing it to use an overlay file system (aufs), block network access or block the possibility to access the X server20:04
stgraberthe project itself can be found at https://launchpad.net/arkose20:04
stgraberI also blogged about it here: http://www.stgraber.org/category/arkose/20:05
stgraberit's in the archive for natty20:05
stgraberand is included by default in Edubuntu20:05
stgraberit's made of 3 different packages20:05
stgraber - arkose (command line tool)20:05
stgraber - arkose-gui (similar to the Run dialog in gnome except it starts everything in a container)20:05
=== Kmos is now known as Guest79780
stgraber - arkose-nautilis (lets you start any binary in a sandbox)20:05
stgraberthe sandboxing itself is done using some new flags of the clone() command, similar to what lxc (https://lxc.sf.net) does (except lxc does it for a full system)20:06
ClassBotchadadavis asked: Can you restrict what libraries and what versions it has access too?20:06
stgraberby default it just uses an aufs overlay so it has the exact same packages as your system, though you can call dpkg in the sandbox to install/remove/upgrade/downgrade packages20:07
stgraberit's ideal when you want to run some untrusted binary (game or similar)20:08
stgraberok, I guess I'm done ;) next !20:08
nigelbw00t w00t20:09
nigelbthanks stgraber20:09
nigelbNext we have UndiFineD!20:09
nigelbStage's yours UndiFineD :)20:09
UndiFineDHello everyone,20:09
UndiFineDI welcome you all for this short introduction to SpeechControl.20:09
UndiFineDIf you have questions, please wait a while, I will be brief, thank you.20:09
UndiFineDThis project started in November 2010 with a vision from wiki.ubuntu.com/hajour. I am Keimpe de Jong, better known as wiki.ubuntu.com/UndiFineD and her partner. We have 4 girls with either a form of AD(H)D, Dyslexia or poor sight.20:09
UndiFineDSpeechControl is an accessibility project. wiki.ubuntu.com/SpeechControl It aims to make controlling your computer easier. In the distant future we hope to reach Star Trek like capabilities.20:09
UndiFineDHow it began ...20:10
UndiFineDWe began by writing capable people in this area, explaining hajour her vision and asked if they would be willing to contribute to it. Then we asked to be placed under the accessibility team and ubuntu beginners team flags.20:10
UndiFineDUbuntu Accessibility20:10
UndiFineDUbuntu Beginners Team20:10
UndiFineDAnd the roundup of currently capable developers with an interest amazed us. We are grateful for all our team members that help us and we welcome new ones with open arms.20:10
UndiFineDKey features:20:10
UndiFineDSpeech recognition: Using the available tools at our disposal, SpeechControl will be able to comprehend your spoken word.20:10
UndiFineDPreconfigured Command Execution: knowing what to do what you ordered it to.20:10
UndiFineDVirtual Assistant: Repetitive task guidance improve for faster and smoother process execution.20:10
UndiFineDSpeech Synthesis: More commonly known at TTS (Text-To-Speech), the voice that communicates with the end-user will be as natural and inviting as technology permits.20:10
UndiFineDSo how is this done ?20:11
UndiFineDAfter some research we found Simon to currently be the best capable open source software capable in controlling a computer. www.Simon-Listens.org20:11
UndiFineDSimon is / was not in the Debian repositories, due to licensing issues. We believe that is cleared up by now and Debian can take on Simon, as it uses the same license type as SSH.20:11
UndiFineDSo what is left to be done ?20:11
UndiFineDWell there are several disabilities, and we wish to make it good for everyone. In order to do that we need to:20:11
UndiFineDextend Simon (API work),20:11
UndiFineDtalk to all the system busses (dbus, at-spi2, ...),20:11
UndiFineDanalyse Speech-to-text and make some context (Wintermute),20:12
UndiFineDexecute commands based upon input given,20:12
UndiFineDhelp to reduce repeating work,20:12
UndiFineDcommunicate back to the user (via Text-to-Speech).20:12
UndiFineDA lot of blueprints need work, we would love to gather all your input and make things better.20:12
UndiFineDRequest come in for simple but related tasks, like remind a user to take their medicine, or read out an e-book.20:12
UndiFineDBesides this, it bothered us we could not properly have an accessible meeting. So there is work being done on a Speech capable chatcliënt plugin.20:13
UndiFineDThe possibilities are open and endless, and would make using your computer so much easier. To prevent a wild bloom of small projects, our team currently focuses on specifying blueprints and defining the path to take. Our initial goal is a proof of concept and optimize later on.20:13
UndiFineDIn a few months good work has been done;20:13
UndiFineDthe team is slowly growing and could use extra help writing specifications. After that we will develop all the libraries and applications.20:13
UndiFineDIf you would like to learn more feel free to come and visit us on #SpeechControl read more about us20:13
UndiFineDon wiki.ubuntu.com/SpeechControl our team is located here: launchpad.net/~speechcontrolteam20:13
UndiFineDI would like to thank everyone in our team, for the great work they have done so far.20:14
UndiFineDIf you have questions feel free to ask them now, but for the sake of the sessions I recommend longer talks to be held in #SpeechControl.20:14
nigelbThanks UndiFineD for the wonderful talk20:14
nigelbThat was loaded with information20:14
nigelbNext up, we have AlanBell.  He's going to talk about a bot he's written20:15
AlanBellUbuntu project communication happens in meetings, lots of them20:15
AlanBellmostly in the #ubuntu-meeting channel and there is a bot in there which kinda records meetings a bit20:15
AlanBellhowever normally someone ends up writing up a summary minutes and emailing it out or adding to the wiki20:15
AlanBelltaking minutes is a dull and menial task, and rather an undignified thing to expect a human to do20:15
AlanBellI believe that the post-meeting procedure should be copy-paste-done20:16
AlanBellthe bot should make nicely formatted minutes20:16
=== lindbohm.freenode.net changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Getting started with daily builds in Launchpad - Instructors: Quintasan
AlanBellso, I wrote a little extension to the existing mootbot20:16
AlanBellwhich is available in some channels as mootbot-UK20:16
AlanBelland then I rewrote the thing based on a debian fork which is a python supybot bot20:17
AlanBellwhich is here now20:17
meetingologyMeeting started Fri Mar  4 20:17:25 2011 UTC.  The chair is AlanBell. Information about MeetBot at http://wiki.ubuntu.com/AlanBell.20:17
meetingologyUseful Commands: #topic #action #link #idea #voters #vote #chair #action #agreed #help #info #endmeeting.20:17
MootBotMeeting started at 14:17. The chair is AlanBell.20:17
MootBotCommands Available: [TOPIC], [IDEA], [ACTION], [AGREED], [LINK], [VOTE]20:17
AlanBelldo feel free to talk here, the channel has been unmuted20:17
macodo the mootbot versus mootbot-uk changes include en_US versus en_GB?20:18
AlanBell#topic do the mootbot versus mootbot-uk changes include en_US versus en_GB20:18
meetingologyTOPIC: do the mootbot versus mootbot-uk changes include en_US versus en_GB20:18
AlanBellinteresting question maco, there has been some translation activity done on mootbot, I think there is a hebrew port of it now20:18
AlanBellI don't think I mentioned programmes or colours in the messages it says anywhere20:19
AlanBellyou can do funky stuff with this like multiple chairs20:19
AlanBell#chair maco20:19
meetingologyCurrent chairs: AlanBell maco20:19
AlanBellyou can use [topic] syntax or #topic it doesn't matter20:19
macoshould make use of that in meetings where the chair has to leave before discussion eneds20:20
AlanBellthere is an awesome new feature in votes too20:20
nigelboh, I like the chair functionality20:20
AlanBell#voters AlanBell maco nigelb20:20
meetingologyCurrent voters: AlanBell maco nigelb20:20
=== darkdevil is now known as Guest97608
nigelbthat helps a lot for the council meetings20:20
AlanBell#vote this house declares cake to be the food of the gods20:20
meetingologyPlease vote on: this house declares cake to be the food of the gods20:20
meetingologyPublic votes can be registered by saying +1, +0 or -1 in channel, (private votes don't work yet, but when they do it will be by messaging the channel followed by +1/-1/+0 to me)20:20
meetingology+1 received from AlanBell20:20
nigelb-1 chocolate!20:20
meetingology-1 received from nigelb20:20
AlanBellnigelb: you just found a bug!20:21
nigelbI did!20:21
AlanBellsomeone else try to vote please20:21
nigelbhe isn't a voter20:21
AlanBelloh Quintasan sucks to be you, your vote doesn't count!20:21
meetingologyVoting ended on: this house declares cake to be the food of the gods20:21
meetingologyVotes for:1 Votes against:1 Abstentions:020:21
* maco will need to remember that for RMB meetings20:21
nigelbbut do we use it in -meeting yet?20:21
AlanBellso this is a supybot plugin, the idea is that it could be incorporated into the regular channel bots which run on the same framework20:22
AlanBellso every channel just grows meeting facilities20:22
nigelbw00t, that rocks20:22
AlanBelland it could replace the bot in -meeting20:22
mhall119when will it integrate with loco-directory meetings?20:22
AlanBellI need some help20:22
AlanBellmhall119: patches welcome!20:22
AlanBelland yes, I need to get back into hacking it further20:22
nigelbthere ya go, so if anyone wants to help AlanBell, help integrate it with LD \o/20:22
* mhall119 recommends nigelb 20:23
AlanBellcode is here https://code.launchpad.net/~ubuntu-bots/ubuntu-bots/meetingology20:23
nigelbI knew you'd do that.  I'll probably take a look ;)20:23
AlanBelland I am quite approachable, come poke me if you want to have a play with it20:23
meetingologyMeeting ended Fri Mar  4 20:23:51 2011 UTC.  Information about MeetBot at http://wiki.ubuntu.com/AlanBell . (v 0.1.4)20:23
meetingologyMinutes:        http://mootbot.libertus.co.uk/ubuntu-classroom/2011/ubuntu-classroom.2011-03-04-20.17.moin.txt20:23
nigelband there is the log feature which I loove!20:24
AlanBellthanks for your time everyone, the minutes of this meeting are at https://wiki.ubuntu.com/AlanBell/mointesting20:24
AlanBellpost meeting procedure completed!20:25
nigelbThat was fun playing with the bot AlanBell20:25
nigelbThank you for it.20:26
nigelbNext up is mhall119! He's going to talk about XDG Launcher \o/20:26
nigelbAll yours mhall119 :)20:26
mhall119XDG Launcher is very simple, you give is a menu path, and it gives you a panel full of launchers from that menu20:27
mhall119you can see it running against /Games here: http://img718.imageshack.us/i/xdglauncher.png/20:27
mhall119as far as panels go, it's about as simple as they come, there's no transparency, no auto-hide, no gradients20:27
mhall119xdg-launcher was developed for the Qimo linux desktop (which I also made)20:28
mhall119as you can see from it's screenshots, it has has a very similar bottom panel http://qimo4kids.com/post/Qimo-20-is-now-available!.aspx20:28
mhall119but previously, that panel was static, if you added a new game, you had to manually add it to the panel20:29
mhall119that's why I made xdg-launcher, so that when someone adds a game through software center, and that game adds a menu entry, it'll automatically show up in the bottom panel20:29
mhall119xdg-launcher is hosted on launchpad: https://launchpad.net/xdg-launcher20:29
mhall119and will be part of the Qimo 3.0 release sometime in May20:30
ClassBotnigelb asked: What language is it written in?20:30
mhall119it's written in Python, and uses GTK and GMenu20:30
mhall119it is as light weight and simple as I could make it20:30
mhall119Qimo is also developed on launchpad: https://code.launchpad.net/qimo20:31
mhall119that's it!20:31
mhall119nigelb: next!20:32
nigelbmhall119: you have a question!20:32
mhall119xdg-launcher isn't in teh repos yet20:32
mhall119in fact, it won't be in the repos at all under than name, as I was informed by a MOTU that the xdg- prefix implied that it comes from the XDG project20:33
mhall119so future development on it will likely fall under the name qimo-launcher20:33
mhall119in fact, there's already a branch by that name under the qimo LP project20:33
nigelbthanks mhall119!20:34
nigelbnext up i jderose20:34
jderosedmedia == Distributed Media Library20:34
jderosedmedia is the foundation of the Novacut distributed video editor, and the Novacut player20:34
jderoseBut dmedia is an independent component designed to work with any app, for both content creation and content consumption20:34
jderoseA big goal is getting this important user data out of application-specific silos, into a common freedesktop service20:34
jderoseEarly on I started talking to the Shotwell and PiTiVi developers... they will likely be some of the first dmedia enabled apps (along with the Novacut apps, of course)20:35
jderoseIn a nutshell, dmedia is a simple distributed filesystem20:35
jderoseThe metadata (small) for your *entire* library is stored in CouchDB and synced between *all* your devices20:35
jderosedmedia uses desktopcouch (which is awesome, use it for all your apps!), so you get slick UbuntuOne sync, say:20:35
jderoseTablet <=> UbuntuOne <=> Workstation20:35
jderoseHowever, the files (big) for your entire library certainly wont fit on a device with limited storage, like a phone20:36
jderoseOr similarly, the files generated by a pro TV or movie production probably wont fit on any single device, not even a big file server20:36
jderoseAnd this is where dmedia gets awesome... a given device can contain any arbitrary *subset* of the files (including no files at all)20:36
jderoseFiles are loaded from peers or the cloud as needed20:36
jderoseYet as the metadata is always available locally, you can still browse through a huge library as if all those files were actually there20:36
jderoseEach file has a document in CouchDB, which among other things tracks all the places the file is stored20:36
jderoseYour personal media files (photos, videos, etc) are treated specially, and dmedia will strive to maintain a configurable level of durability for all your personal files20:36
jderoseSo dmedia knows when it should copy the new videos you shot from your laptop to your workstation, or upload them to the cloud20:36
jderoseAnd dmedia also knows when it can safely delete files on a given device to free up space for files currently needed20:37
jderoseThis month's release (dmedia 0.5) will probably be the first that is complete enough to be useful to the end user... so it's an exciting time to join in on the development20:37
jderoseThe dmedia backend is written in Python... currently 6,193 lines of code and docstrings, 6,719 lines of unit tests (I really like unit tests)20:37
jderoseAnd the UI is done with HTML5 and JavaScript, talking directly to CouchDB using XMLHttpRequest20:37
jderoseThe project is coordinated on Launchpad - https://launchpad.net/dmedia20:37
jderoseTo learn more, please stop by #novacut on irc.freenode.net!20:37
jderosequestions?  :)20:37
jderose(01:38:15 PM) nigelb: QUESTION: How can we help?20:38
ClassBotnigelb asked: How can we help?20:38
jderoseoops :)20:38
jderosewell, if your a Python dev, lots of fun stuff there.... and probably the most exciting stuff is for people who a fluent with HTML5/JavaScript...20:39
jderosebecause that what the user sees :)20:39
jderoseand i think things are getting to the point where you can do really cool things without much work... ui stuff that is20:39
jderoseand if you know/like CouchDB... you'll fall in love with dmedia pretty quick, i think :)20:40
jderosewe do monthly releases, so your code will be in users hands quickly20:40
nigelbok, thanks jderose20:41
nigelbGreat to hear about dmedia20:41
nigelbAnd thanks for making it here today :)20:41
nigelbNext up yofel and Quintasan are back again!20:41
jderosehehe.. .np... thank you everyone for listening in :)20:41
nigelbOver to you guys :)20:41
QuintasanSup, it's me and yofel again20:41
* yofel waves20:41
QuintasanSo we are going to talk about Project Neon I mentioned in my Source Builds session, so yofel, what is Project Neon?20:42
yofelProject Neon provides Daily Builds of the KDE trunk using the launchpad recipes that Quintasan presented earlier20:42
QuintasanYeah, so basically we grab KDE bleeding edge source code and compile it and put into a PPA so you can experience the awesomeness without compiling it yourslef20:43
Quintasanyourself even20:43
QuintasanOur technical home is -> https://wiki.kubuntu.org/Kubuntu/ProjectNeon20:44
QuintasanIf you want to know where to send the beer -> https://launchpad.net/~neon20:44
QuintasanThe magic used is available at -> https://code.launchpad.net/~neon20:44
Quintasanand here are the results -> https://launchpad.net/~neon/+archive/ppa20:44
QuintasanWe support natty and maverick for now.20:44
QuintasanInstalling those packages will not break you KDE settings (if you have any) and can peacefully coexist with distro's default KDE version20:45
QuintasanIt can be used for testing, screencasting, bug fixing, development and so on20:45
QuintasanWe compiled it with ALL dependencies which we could get so users will get EVERY available feature to test (and probably break their computers ;)20:46
QuintasanSo, if you ever wanted to give latest KDE a test-drive and you didn't want to compile the whole stuff yourself you can use our packages20:48
QuintasanBe sure to drop us a line at #project-neon how did it work20:48
QuintasanIt's still a work in progress as we are working on daily builds of Amarok20:48
ClassBotgmargo2 asked: "peacefullyl coexist"... how do you do that?  A different KDM option?20:48
yofelA different KDM option and we install our files in /opt/project-neon20:49
Quintasangmargo: We use an separate X session entry, separate envinronemnt config20:49
Quintasanand ofc install stuff to other /opt/project-neon as yofel said20:49
ClassBotmonish005 asked: which development language?20:49
Quintasanmonish005: There is no language used, we use Launchpad Daily Builds feature to build the packages20:50
yofelif anything we have a few bash utilities, other than that only debian packaging and the recipes20:50
ClassBotThere are 10 minutes remaining in the current session.20:51
QuintasanSo, I think we are done, questions and requests welcome at #project-neon20:51
nigelbThank you Quintasan and yofel!20:52
nigelbUnfortunately, our last host kirkland couldn't make it20:52
yofelwhen you want to use Project Neon visit our usage instructions on http://techbase.kde.org/Getting_Started/Using_Project_Neon_to_contribute_to_KDE - thanks!20:52
nigelbDustin Kirkland was to talk about project bikeshed20:53
nigelbI'll link you to the project20:53
nigelbThe project is about a bunch of scripts which are helpful, but no one is sure which package they go into20:53
nigelbThe name of the project is inspired by the very famous color of the bikeshed mail thread20:54
nigelbI'll leave you all to explore the package20:54
nigelbAnd with that our project lighting talks come to an end20:54
nigelbThank you stgraber, UndiFineD, AlanBell, mhall119, jderose, yofel, and Quintasan for making this a grand success20:55
nigelbWe loved listening to your projects and lets all continue to build cool stuff :)20:55
UndiFineDthanks for being a good host20:55
ClassBotThere are 5 minutes remaining in the current session.20:56
jderosethanks again nigelb, you're one rockin host :)20:56
=== popey_ is now known as popey
ClassBotLogs for this session will be available at http://irclogs.ubuntu.com/2011/03/04/%23ubuntu-classroom.html21:01
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat ||
nigelband its over...21:02
nigelba few more weeks and we have app developer week and then we'd have open week again21:02
darkdevil666its not been put up on the schedule list21:05
darkdevil666where do i get the schedule?21:05
darkdevil666@all: where can i get the next "event week" schedule?21:12
meetingologydarkdevil666: Error: "all:" is not a valid command.21:12
Mkaysihttp://is.gd/8rtIi ?21:13
darkdevil666thanks Mkaysi. but it dsnt show schedules for app developer week n open week21:14

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