=== apple is now known as Guest82349 | ||
conradin | solved the question of lickalot, but he gone now | 04:30 |
---|---|---|
conradin | who is in here? | 04:30 |
TheLordOfTime | just us dead people :P | 04:30 |
TheLordOfTime | support's in #ubuntu btw | 04:30 |
conradin | support? | 04:31 |
conradin | so what is this? | 04:31 |
TheLordOfTime | that was a mistype | 04:31 |
* TheLordOfTime directed to the wrong channel by accident | 04:31 | |
TheLordOfTime | this is the classroom. details at https://wiki.ubuntu.com/Classroom | 04:31 |
T_H_X | heads down thumb up | 04:31 |
conradin | Ima IRC newb havnt used since 2003 | 04:33 |
conradin | cept earlier today | 04:33 |
conradin | whats supposed to be going down in this room? | 04:33 |
conradin | I like bash scripting, expect, tcl... stuff like that. and some pixel art. | 04:34 |
DarkStorm_ | conradin: there's actually an entire schedule of events (unfortunately they all conflict with school for me), do /topic | 04:46 |
cc11rocks | Hello #ubuntu-classroom. Where can I find the log's from today's sessions? | 04:56 |
chilicuil | hi cc11rocks, at irclogs.ubuntu.com/2012/08/28/%23ubuntu-classroom.html | 04:56 |
cc11rocks | Thank you :) | 04:56 |
cc11rocks | Is getting started/setup for finding/fixing/removing bugs covered here (in today's or in the next few days discussions/tutorial/etc)? | 05:02 |
cc11rocks | I found this : "More specifically: To fix a bug in Ubuntu, you would first get the source code for the package, then work on the fix, document it so it is easy to understand for other developers and users, then build the package to test it." | 05:04 |
JoseeAntonioR | cc11rocks: The topic is being covered today | 05:05 |
cc11rocks | Okay, thanks. JoseeAntonioR : Will you be present for this particular topic? | 05:05 |
JoseeAntonioR | cc11rocks: I'm sorry, but I won't. | 05:05 |
cc11rocks | Okay, thanks. If anyone is and you want to, email me the relevant info at cc11rocks@yahoo.com ...If I don't receive an email, I'll look for it in the logs but I don't have a ton of time between work/school/etc (and I understand that everyone else has busy lives as well) | 05:07 |
JoseeAntonioR | cc11rocks: You will need to search in the logs. | 05:10 |
cc11rocks | Okay, thanks | 05:10 |
AndChat|489600 | 08:04 | |
noxnox | hi | 09:05 |
noxnox | Ahmed Kamal | 09:06 |
MohamedAlaa98 | Hi | 09:07 |
noxnox | when the classes starts | 09:22 |
noxnox | does anyone knows? | 09:23 |
mnemoc | noxnox: tried looking at the url in the topic of the channel? | 09:24 |
=== sayan_ is now known as sayan | ||
=== shiftingcontrol_ is now known as shiftingcontrol | ||
=== Maddi is now known as HelvitisMaddi | ||
=== helderc_ is now known as helderc | ||
conradin | solved the question of lickalot, but he gone now | 12:25 |
conradin | maybe lickalot will return today | 12:26 |
eklok | is not session going on? | 13:40 |
raju | eklok: i think still one more hour is there for the session | 13:44 |
eklok | a fuck i messed it up again with the time difference | 13:50 |
=== Newbie is now known as Guest95470 | ||
=== voidHB is now known as skizobass | ||
=== Goat is now known as Guest74254 | ||
=== norbi is now known as Guest78442 | ||
=== Dark is now known as Guest11466 | ||
=== Ubuntu is now known as Guest65990 | ||
=== irfan is now known as Guest68765 | ||
dholbach | Alright, welcome everybody! | 14:55 |
Guest68765 | thankyou | 14:55 |
dholbach | We are about to start in 5 minutes, I just wanted to mention some organisational things first | 14:56 |
coalitians | Gud to see you, dholbach | 14:56 |
coolbhavi | dholbach, thanks a lot! | 14:56 |
dholbach | #ubuntu-classroom is used just for the sessions themselves, but you can use #ubuntu-classroom-chat to discuss everything and ask questions. So please make sure you join the channel as well. | 14:56 |
dholbach | If you want to ask questions, please make sure you prefix them with QUESTION:, so they are easier to spot | 14:56 |
dholbach | ie: QUESTION: What makes Quickly so great? | 14:56 |
dholbach | Also: all logs will be available at https://wiki.ubuntu.com/UbuntuDeveloperWeek - currently you can see all the logs from yesterday. | 14:56 |
dholbach | The channels are busy, so if you would like to stop notices about people joining and parting coming in, please review https://wiki.ubuntu.com/UbuntuDeveloperWeek/JoiningIn | 14:57 |
dholbach | Enjoy UDW Day 2 and in a few minutes, mterry will be your host! | 14:57 |
dholbach | Thanks everyone! | 14:57 |
=== Guest68765 is now known as van | ||
van | when it starts? | 14:59 |
=== peaches7_ is now known as peaches | ||
coolbhavi | in a minute van | 14:59 |
skrocco | Hello all | 15:00 |
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Introduction to Quickly - Instructors: mterry | ||
eklok | hi | 15:00 |
nitvirus | hello | 15:00 |
skizobass | hi! | 15:00 |
ClassBot | Logs for this session will be available at http://irclogs.ubuntu.com/2012/08/29/%23ubuntu-classroom.html following the conclusion of the session. | 15:00 |
mterry | Hello! | 15:01 |
mterry | My name is Michael Terry, and I'm a maintainer of Quickly | 15:01 |
mterry | I usually give introduction to Quickly talks during App Developer Week, but I'm also doing one this week, let me know in ubuntu-classroom-chat if you'd like things to be more toward the technical details of Quickly or not | 15:02 |
mterry | So I'll start with a quick overview of Quickly and where we are now, what our plans are for 12.10 and 13.04 | 15:02 |
mterry | So Quickly is at core a way to get started developing very quickly | 15:02 |
mterry | And not have to worry too much about packaging or how to get your app into Ubuntu | 15:03 |
mterry | We make some opinionated choices (like Python, GTK+) that Ubuntu recommends, so that we can offer a better experience | 15:03 |
mterry | But there are plenty of other "templates" that Quickly offers to do other things (like HTML5 or flash) | 15:03 |
mterry | So why use Quickly or get involved with Quickly? | 15:04 |
mterry | Well, I guess the reason to use it is for the above -- if you don't care about packaging and just want to get started :) | 15:04 |
mterry | If you're interested in contributing to Quickly, ask questions in the chat room and I can answer and explain | 15:04 |
mterry | Always things to do, and we just started planning a bunch of work for 13.04 | 15:05 |
mterry | So, in 12.04, there are three templates: the normal Python+GTK one, a command line interface one, and a flash game one | 15:05 |
mterry | There are also HTML5, Qt, Qt Quick, and a Unity Lens ones maintained by the community | 15:05 |
ClassBot | eklok asked: can you work with Quickly via terminal and GUI? | 15:06 |
mterry | Right now, it's designed to be used via the terminal only | 15:06 |
mterry | But Michael Hall worked on a GTK frontend for it | 15:06 |
mterry | quickly-gtk I believe | 15:06 |
mterry | https://launchpad.net/quickly-gtk | 15:06 |
ClassBot | skizobass asked: Can you use Eclipse, PyDev for write a Python App with Quickly and then publish in the Software Center? | 15:07 |
mterry | Yes and no | 15:07 |
mterry | So we don't have integration with Eclipse or PyDev as such | 15:07 |
mterry | But you could write such an app and stick it inside of a Quickly project with a small amount of work, I believe | 15:07 |
mterry | What Quickly gives you is a skeleton project | 15:08 |
mterry | And if you threw away some of the code it gives you and stick yours in, you'd get most of the benefits of Quickly that way | 15:08 |
ClassBot | ben72 asked: in 12.04 quickly is the package to get right? | 15:08 |
mterry | Yes | 15:09 |
ClassBot | FlowRiser asked: What is the current workflow of Quickly ? | 15:09 |
mterry | So let's say you want to start a project | 15:09 |
mterry | You open a Terminal | 15:09 |
mterry | You run "quickly create ubuntu-application test-project" | 15:09 |
mterry | The ubuntu-application part there is choosing which template to use. | 15:10 |
mterry | In our case, we want the default-ubuntu-recommendation, which is Python+GTK | 15:10 |
mterry | Then, it will create a skeleton project and launch it | 15:10 |
mterry | Close it out, "cd test-project", and you're sitting in your new project | 15:10 |
mterry | You can now edit your code with "quickly edit" or package it with "quickly package". I'll get to these commands in a bit | 15:11 |
ClassBot | skizobass asked: Can you write and organize the code (classes, packages, etc) like Eclipse in Quickly? | 15:11 |
mterry | I'm not sure how Eclipse is organized. Hold on | 15:11 |
mterry | The default skeleton gives you one directory/Python-module for your code | 15:11 |
mterry | And also one Python module that it owns with boilerplate code | 15:12 |
mterry | You put all your code in your module and Quickly's wrapper will call into it | 15:12 |
mterry | So, as above, if you wanted to import an existing project into Quickly, you would replace that one module with your code | 15:12 |
mterry | But as far as classes go, yes, Python and Quickly both encourage one-class-per-file | 15:13 |
mterry | But you can do anything you want. It's not as strictly enforced as, say, Java | 15:13 |
ClassBot | nja asked: Will you be covering some Python in this session? | 15:13 |
mterry | I hadn't planned to, no. I think there are better resources than me for that | 15:13 |
=== irfan_ is now known as van | ||
mterry | OK, there are no more questions, so I'll start diving into using Quickly more | 15:14 |
mterry | Before I forget, Quickly also has a built-in tutorial | 15:14 |
mterry | If you don't want to listen to me blather | 15:14 |
mterry | Run "quickly tutorial" in your project directory | 15:14 |
mterry | But let's continue with my blathering | 15:15 |
ClassBot | FlowRiser asked: I see that most of the languages you use require no compiling of the code; is there any chance we'll see a Cpp and GTK template? | 15:15 |
mterry | That's certainly a possibility | 15:15 |
mterry | But not something we've done yet | 15:15 |
mterry | Quickly's template system lets someone write such a template easily | 15:15 |
mterry | It just hasn't been done | 15:15 |
mterry | We had some progress on a Vala template, which is compiled | 15:15 |
mterry | But we've found in general, new users prefer non-compiled languages like HTML or Python | 15:16 |
ClassBot | peaceisin asked: For using quickly, one need to know how to program in python? | 15:16 |
mterry | Yes, at least for the default recommended template | 15:16 |
mterry | Actually, for all the shipped templates. | 15:16 |
mterry | But again, that's not necessarily true in the future | 15:16 |
mterry | But is now | 15:17 |
ClassBot | coalitians asked: Quickly is in python? | 15:17 |
mterry | Yes. Both the skeleton project and Quickly itself | 15:17 |
ClassBot | BebopSteve asked: On "quickly edit," is there anything special about that? Or can you just use a text editor of your choice | 15:17 |
mterry | You can use the editor of your choice. You can set either EDITOR or QUICKLY_EDITOR environment variables to change it | 15:17 |
ClassBot | NickE asked: Does Quickly support Python 3 development? | 15:17 |
mterry | Not yet | 15:17 |
mterry | We want to support it, but it's looking like that will happen for 13.04 | 15:18 |
ClassBot | chilicuil asked: does quickly support all data bases?, or do I need to use libraries? | 15:18 |
mterry | For that, you don't need special Quickly support | 15:18 |
mterry | Just import the appropriate Python modules and go crazy | 15:18 |
mterry | Quickly doesn't limit your choices of how you write your app. It's just a wrapper around it, to provide some integration support into Ubuntu | 15:19 |
mterry | OK | 15:19 |
mterry | So another useful command to change your app, is "quickly design" | 15:19 |
mterry | Which will bring up Glade, a GUI editor | 15:19 |
mterry | How to use Glade is a whole 'nother talk, but it tries to be a point-and-click interface builder | 15:19 |
=== thotp_ is now known as thotp | ||
mterry | It helps to understand GTK a bit when using it | 15:20 |
mterry | But the basic idea is that you can make new widgets in the pane on the left, place them in the middle, and adjust properties of widgets in the bottom right | 15:20 |
ClassBot | chilicuil asked: Quickly is intent to produce desktop apps or Web ones? | 15:20 |
mterry | Right now, desktop apps | 15:20 |
mterry | We do have an HTML5 template in the community bundle that kind of blurs that a bit | 15:21 |
mterry | But it | 15:21 |
mterry | But it's still designed for the desktop (runs Python underneath) | 15:21 |
ClassBot | green7 asked: Do we need to know GTK to use Quickly? | 15:21 |
mterry | Yes, for the default template | 15:21 |
mterry | Like for Glade | 15:22 |
=== Unknown12290 is now known as waa3 | ||
ClassBot | nja asked: Where would you recommend we learn Python? | 15:22 |
mterry | Dive Into Python is very good | 15:22 |
mterry | http://www.diveintopython.net/ | 15:22 |
mterry | OK | 15:23 |
mterry | So let's say you're comfortable with Glade and have made some changes (and we can come back to it) | 15:23 |
mterry | If you want to see what your project looks like now, run "quickly run" | 15:23 |
mterry | Which will load all your edited files and show you the current project state | 15:24 |
mterry | One neat trick Quickly does is that when you add a widget, you frequently want to respond to user events on it | 15:24 |
mterry | Like clicks or whatever | 15:24 |
mterry | So Quickly makes it easy | 15:24 |
mterry | If you add a widget named button1 | 15:25 |
mterry | You can just write a method in your window class called on_button1_clicked(self, widget, data=None) | 15:25 |
mterry | And do what you need there | 15:25 |
mterry | Quickly will notice that and hook up the widget to your method | 15:25 |
mterry | You need to use the on_WIDGETNAME_SIGNALNAME format | 15:25 |
mterry | And the signature will change depending on the signal type | 15:26 |
mterry | See the GTK documentation for details on a given signal | 15:26 |
ClassBot | green7 asked: Is there a difference between packaging and quickly run? | 15:26 |
mterry | Yes | 15:26 |
mterry | So quickly run is just a quick spot-check | 15:26 |
mterry | It runs all the files from where they are in your project directory | 15:26 |
mterry | But quickly package actually creates a Debian package file | 15:27 |
mterry | Which you can install into your system if you're root | 15:27 |
mterry | So let's say we ran 'quickly package' on our test-project program | 15:27 |
mterry | It would give us a file like ../test-project_0.1_all.deb | 15:27 |
mterry | We could then run "sudo dpkg -i ../test-project_0.1_all.deb" and install our new program | 15:27 |
mterry | You'd see it show up in the dash and everything | 15:28 |
=== yofel_ is now known as yofel | ||
mterry | Before you seriously start packaging your app though, it's best to fill out some of the information in the 'setup.py' file | 15:28 |
mterry | Like homepage and author | 15:28 |
mterry | And to run "quickly license" to specify what the license of your program is | 15:28 |
mterry | Because that's all important information before you start distributing it to other people | 15:29 |
mterry | So let me talk about packaging a bit | 15:29 |
mterry | Let's say we think this default app is amazing | 15:29 |
mterry | And we want to distribute it to some friends | 15:29 |
mterry | Well, first, you should test it locally with quickly package | 15:30 |
mterry | Make sure that it installs fine | 15:30 |
mterry | But if you want to share with a wider community, you might want to set up a PPA | 15:30 |
mterry | Launchpad lets you have your own PPA where you can put packages and people can download them as you update the PPA | 15:30 |
mterry | Let's say you've done that already (I can go into details if desired) | 15:31 |
mterry | You'll also need GPG keys set up | 15:31 |
mterry | And SSH keys | 15:31 |
mterry | Launchpad has documentation on this | 15:31 |
mterry | https://help.launchpad.net/YourAccount/ImportingYourPGPKey | 15:31 |
mterry | https://help.launchpad.net/YourAccount/CreatingAnSSHKeyPair | 15:32 |
mterry | But OK, let's say we've got our PPA set up | 15:32 |
mterry | Then running "quickly share --ppa mterry/testing" will package up our project and upload it to my (mterry's) 'testing' PPA | 15:32 |
mterry | quickly share will use a testing version like 0.1public1 | 15:33 |
mterry | Not a nice version | 15:33 |
mterry | But it's because quickly share is best for uploading in-progress versions for wider testing | 15:33 |
mterry | When you are ready to release for real, use "quickly release" | 15:33 |
mterry | This will put it in a PPA but update the version to something nice like 12.08 | 15:33 |
mterry | Let me pause for questions | 15:34 |
ClassBot | nja asked: What Python editor would you recommend? | 15:34 |
mterry | I'm a luddite and like just simple gedit | 15:34 |
mterry | So I may not be the best person to ask | 15:34 |
=== marius is now known as Guest7295 | ||
mterry | I'm not even sure what other people would recommend | 15:34 |
mterry | Chat room can help out I bet | 15:34 |
mterry | OK, so I quickly covered share and release | 15:35 |
mterry | Which are the two ways Quickly offers to share your project around via a PPA | 15:35 |
mterry | But let's say you've finished really polishing your app and it's great now | 15:35 |
mterry | You want to get it into the Ubuntu Software Center | 15:36 |
mterry | Then you can use "quickly submitubuntu" | 15:36 |
mterry | Which will also upload into a PPA | 15:36 |
mterry | But will make various packaging changes that are required for Ubuntu Extras packages | 15:36 |
mterry | If you want to test such changes locally, you can also run "quickly package --extras" to get a local Debian package file that also has those changes | 15:37 |
mterry | (basically, it puts your application inside /opt instead of sprinkled around the filesystem like in /usr/bin and /usr/share) | 15:37 |
ClassBot | green7 asked: Is Quickly recommended over usual PyGTK programming? | 15:37 |
mterry | For an app that you want to share with other Ubuntu users, yes | 15:37 |
mterry | But Quickly is really just a shell around usual PyGTK programming | 15:38 |
mterry | It helps with packaging and integration, and a little bit of magic like I mentioned between Glade and your code | 15:38 |
ClassBot | ironhalik asked: What's the backward compatibility situation like with Quickly and users using older Ubuntu releases? Are there any issues? | 15:38 |
mterry | Should be small | 15:39 |
mterry | Quickly injects a bit of code into your app (in, e.g., the test_project_lib/ folder) | 15:39 |
mterry | So that will stay constant as you backport your app to older releases | 15:39 |
mterry | The only thing that might cause problems is dependencies | 15:39 |
mterry | So if you depend on a newer version of a package, or a package that didn't exist in older releases, obviously that's going to be a problem | 15:40 |
mterry | But I believe Quickly itself should work well into the past. 12.04's version uses gobject-introspection for it's GTK/Python bindings | 15:40 |
mterry | I don't know how far that goes back. Like, I bet it doesn't work well in 10.04 | 15:41 |
mterry | But it should for 11.10 at least | 15:41 |
ClassBot | gigix asked: Does Quickly binds your app strictlty to Ubuntu | 15:41 |
mterry | No. Not your app itself. | 15:41 |
mterry | It offers different ways of making your life in Ubuntu easier | 15:41 |
mterry | Like making a Debian package file and uploading to PPAs | 15:41 |
mterry | But your code itself should not require Ubuntu features | 15:42 |
ClassBot | FlowRiser asked: What are some good GTK resources ? | 15:42 |
mterry | http://developer.gnome.org/ has some | 15:42 |
mterry | http://developer.gnome.org/gtk3/stable/ is an API overview | 15:42 |
mterry | And http://developer.ubuntu.com/resources/ has some | 15:43 |
ClassBot | marcosb asked: Ruby template is on schedule? | 15:43 |
mterry | Nope | 15:43 |
mterry | :-/ | 15:43 |
mterry | I don't know who's working on one | 15:43 |
mterry | But it's not on my radar | 15:43 |
ClassBot | ben72 asked: is there a way to make quickly work with python 3 manually even though it's not supported? Yesterday we learned python 3 is the way to go for new applications. :) | 15:44 |
mterry | Good question | 15:44 |
mterry | Quickly is unfortunately lagging here | 15:44 |
mterry | I agree Python3 is the way to go | 15:44 |
mterry | But we couldn't get all our features working with it in time. Notably, the packaging of your app | 15:44 |
mterry | So you can certainly start a new Quickly app | 15:45 |
mterry | And then port it to Python | 15:45 |
mterry | 3 | 15:45 |
mterry | (Should be real simple) | 15:45 |
mterry | But | 15:45 |
mterry | You'll lose the ability to run "quickly package", share, release, or submitubuntu | 15:45 |
mterry | :( | 15:45 |
mterry | But you can take the Python2 packaging that Quickly would give you | 15:46 |
mterry | (if you run quickly package before porting to Python 3) | 15:46 |
mterry | Then modify the debian/ directory to work with Python 3 yourself | 15:46 |
mterry | Then don't run "quickly package" youself... | 15:46 |
mterry | You'll at least have the benefit of not having to start from scratch | 15:47 |
mterry | Quickly can give you all the Python2 packaging and code and you can update to work with Python3 | 15:47 |
mterry | You just can't use Quickly's packaging support going forward | 15:47 |
mterry | :( | 15:47 |
mterry | OK | 15:47 |
mterry | Quickly has a few other neat features | 15:48 |
mterry | Like "quickly save" | 15:48 |
mterry | Which will save all your changes into a version control system called bzr (bazaar) | 15:48 |
mterry | Kind of like checkpointing your code after a set of related changes | 15:48 |
mterry | You can use bzr directly (like "bzr diff") to see your current changes and such | 15:48 |
mterry | bzr is great, and it integrates with Launchpad. Like you can do "bzr push lp:~mterry/+junk/test-project" | 15:49 |
mterry | To push all your code into Launchpad (under my account -- obviously change for your account) | 15:49 |
mterry | +junk is just a trick Launchpad has to let you upload without having to choose a project | 15:50 |
mterry | If you've registered your project in Launchpad, you can use it's name instead | 15:50 |
mterry | But anyway, that's all Launchpad stuff, not Quickly stuff! | 15:50 |
mterry | Just wanted to mention quickly save | 15:50 |
ClassBot | There are 10 minutes remaining in the current session. | 15:50 |
mterry | Another neat trick is "quickly add dialog new-dialog" | 15:50 |
mterry | Let's say you want to add a save dialog or error dialog or something like that. A common enough operation that Quickly gives a little help | 15:51 |
mterry | It will create the code for you and add it to Glade (but you have to close Glade and relaunch with "quickly design") | 15:51 |
mterry | And run "quickly edit" again to open up the new files | 15:51 |
mterry | You'll see your new dialog in code and in Glade | 15:51 |
mterry | Then just import it in your main window with "from project_name.DialogName import DialogName" | 15:52 |
mterry | And instantiate it with "d = DialogName()" | 15:52 |
mterry | You can use "quickly help" to see all the commands available and help for individual commands too | 15:52 |
mterry | Like "quickly help save" | 15:52 |
ClassBot | skizobass asked: When you create a new dialog with Quickly. How you separated the script from the main script? | 15:52 |
mterry | Quickly will create a new python file in (e.g.) test_project/ | 15:53 |
mterry | So if you ran "quickly add dialog hello" | 15:53 |
mterry | It will create a test_project/HelloDialog.py file | 15:53 |
mterry | (I think I got that name right) | 15:53 |
ClassBot | nja asked: Is there anything like .toString() in Python? | 15:53 |
mterry | Yes | 15:53 |
mterry | str() | 15:54 |
mterry | so let's say I have an object | 15:54 |
mterry | o | 15:54 |
mterry | I do str(o) | 15:54 |
mterry | to get a string | 15:54 |
ClassBot | skizobass asked: Quickly separate the code automatically for each dialog ? | 15:54 |
mterry | Yes, if you use the "quickly add dialog" command | 15:54 |
mterry | You don't have to do that yourself | 15:54 |
mterry | You can organize your code all you want when you write it | 15:54 |
mterry | But when Quickly makes them, that's what it does | 15:54 |
mterry | OK, I only have a few minutes left | 15:55 |
mterry | I know this was a little scattered, but hopefully you have a better idea what Quickly is | 15:55 |
mterry | And why you might want to use it | 15:55 |
ClassBot | There are 5 minutes remaining in the current session. | 15:55 |
mterry | Again, I recommend "quickly help" and "quickly tutorial" for exploring on your own | 15:56 |
mterry | And http://developer.ubuntu.com/resources/app-developer-cookbook/all-recipes/ has some neat things you can do | 15:56 |
mterry | As does all of http://developer.ubuntu.com/resources | 15:56 |
=== norbi is now known as Guest81889 | ||
mterry | Seems like no more questions. Thanks everyone! | 15:57 |
ClassBot | nja asked: In python, is it possible to have the same constructor with different arguments? | 15:58 |
mterry | Yes and no | 15:58 |
mterry | You'd use the same method | 15:58 |
mterry | But you can have optional arguments like __init__(option1=None, option2=None) | 15:59 |
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Getting help to start with Ubuntu Development The developer advisory team and beyond - Instructors: coolbhavi | ||
ClassBot | Logs for this session will be available at http://irclogs.ubuntu.com/2012/08/29/%23ubuntu-classroom.html following the conclusion of the session. | 16:00 |
coolbhavi | Alright then | 16:03 |
coolbhavi | Hello all! I am Bhavani Shankar a 25 year old ubuntu MOTU developer and I’ll be taking a session today on the new initiative we launched in the previous cycle called the developer advisory team in short DAT :) | 16:03 |
coolbhavi | In this session I am going to to show you how we can help you to get involved in ubuntu development if you are interested :) | 16:04 |
coolbhavi | so lets get started | 16:04 |
coolbhavi | :) | 16:04 |
coolbhavi | == Why are we; the DAT here? == | 16:04 |
coolbhavi | The developer advisory team is a bunch of people who make ubuntu development more social in general with an aim to reach out to contributors of varied kinds (with emphasis on new contributors and help them to get around the ubuntu development world) | 16:05 |
coolbhavi | == Our general process == | 16:05 |
coolbhavi | Our process consists of mainly 4 parts: | 16:06 |
coolbhavi | First part is we reach out to interested people by email (by spotting them through various ways for instance, spotting them via the number of uploads they have done this cycle or anyone who expresses interest in ubuntu development and have got their first upload into ubuntu and so on). | 16:06 |
coolbhavi | (PS: Chances are that if you are a new/experienced contributor, you might have got an email from the DAT too :) ) | 16:07 |
coolbhavi | Second part is where we interview interested candidates about their experience of development in the Ubuntu world and about their aim as to what they wish to achieve in ubuntu development through questionnaires in the email. | 16:07 |
coolbhavi | Third part is where we provide pointers ( _not to be confused with one on one mentoring_ ) and track the progress using our own internal trackers. | 16:07 |
coolbhavi | (Ok lets slow down a bit if m fast) | 16:08 |
=== Are is now known as Guest42852 | ||
coolbhavi | Last part is once the candidate feels he is ready after some contributions we will help setup his application for interview with the developer membership board (DMB) | 16:09 |
coolbhavi | Any questions are welcome before I move ahead | 16:09 |
coolbhavi | to the next stage :) | 16:10 |
ClassBot | nja asked: What benifits do you get for being on the DMB? | 16:11 |
coolbhavi | nja, I'm afraid I might not be the right person to ask as I donot serve on the DMB | 16:11 |
ClassBot | NickE asked: so your main mission is to help people go from beginners / casual contributors to formally-recognised ubuntu devs? | 16:12 |
coolbhavi | NickE, exactly thats our mission for people who are interested to contribute to ubuntu development | 16:13 |
ClassBot | BebopSteve asked: Do you or do you plan on having a website with information and various references to help those new to the scene? | 16:13 |
coolbhavi | BebopSteve, I'll be covering it in later part of the session :) | 16:14 |
coolbhavi | ok lets move on then :) | 16:14 |
coolbhavi | ok next question which might crop up in your mind is I'm interested so how can I start | 16:16 |
coolbhavi | ? | 16:16 |
=== keffie_jayx is now known as effiejayx | ||
coolbhavi | our answer would be simple if you are interested we are there to help you out :) | 16:17 |
coolbhavi | moving on :) | 16:18 |
coolbhavi | == Do you personally mentor me in any way? == | 16:18 |
coolbhavi | Unfortunately, the answer is “no”. We only provide pointers (for instance in the form of weblinks or introducing you to the team which you might be interested in contributing in (Like the desktop team, the security team, etc) | 16:19 |
coolbhavi | (In case you get stuck in your ubuntu development related adventure you can always get in touch with the Ubuntu MOTU devs on #ubuntu-motu on irc.freenode.net or ubuntu-motu@lists.ubuntu.com) | 16:19 |
ClassBot | FlowRiser asked: What is my skillset isn't that advanced or wide ? | 16:19 |
coolbhavi | FlowRiser, you need not have to worry not everyone will start as hardcore programmers/coders :) | 16:20 |
coolbhavi | == Can you provide me any pointers now to get started into ubuntu development? == | 16:21 |
coolbhavi | Getting started is pretty straightforward. You can have a look at the packaging guide for a start http://developer.ubuntu.com/packaging/html/ and to get involved one can have a look at the bug fixing initiatives for a start https://wiki.ubuntu.com/UbuntuDevelopment/BugFixingInitiative | 16:21 |
ClassBot | NickE asked: Can you remind me what "MOTU" stands for? | 16:21 |
coolbhavi | NickE, MOTU stands for Masters of the Universe the team which takes care of universe and multiverse component in ubuntu | 16:23 |
ClassBot | skizobass asked: is necessary some certification for make part of the community? | 16:23 |
coolbhavi | skizobass, not required :) as I said earlier only interest is required :) | 16:24 |
coolbhavi | ok moving on :) | 16:25 |
coolbhavi | == What sort of people we reach out for? == | 16:25 |
coolbhavi | We reach out to new contributors and to experienced contributors who do not yet have upload rights to the ubuntu archives alike, also to people who have gone inactive to see if there’s anything we can do for them. | 16:25 |
coolbhavi | == I am an existing contributor for “x” months and wish to apply for upload rights. Can you help? == | 16:26 |
=== thisfred_ is now known as thisfred | ||
coolbhavi | Definitely :) (but the general requirement of the DMB is minimum 6 months of sustained contributions to apply for upload rights). Also a good idea is to reach out to your sponsors and ask them to add comments to your application. | 16:26 |
coolbhavi | Any questions anyone please feel free to ask :) | 16:27 |
ClassBot | BebopSteve asked: What is the difference between contribute and upload? Don't you have to upload to contribute? | 16:28 |
coolbhavi | BebopSteve, yes but until you get upload rights to the archive you contribute your changes to a bug for instance and a person who has access to the archive uploads the change on your behalf | 16:30 |
ClassBot | FlowRiser asked: What do you mean by sponsors ? We do this for free :D | 16:31 |
coolbhavi | FlowRiser, The process of uploading a change by someone who has archive access on behalf of you is called sponsoring a package in debian/ubuntu world and the devs who do that are called sponsors | 16:33 |
ClassBot | skizobass asked: Is necessary be a python developer? What other work do the contributors? | 16:33 |
coolbhavi | skizobass, its not absolutely mandatory but experience in python development helps you to work much quicker on your favourite python stuff in the ubuntu world :) | 16:35 |
ClassBot | FlowRiser asked: Is it possible to list domains of activity (apps, GUI, kernel,modules, etc ) we can contribute to, in order of difficulty or skillset requirment ? | 16:35 |
coolbhavi | FlowRiser, yes you can have a look at the TEAMS page or the MOTU page on the ubuntu wiki for a start on different teams and how to contribute | 16:36 |
ClassBot | NickE asked: So if you gain the trust of sponsors by doing good work, you eventually achieve the same status as them, yes? | 16:37 |
coolbhavi | NickE, yes :) you gain archive access and become a dev yourself :) | 16:37 |
ClassBot | TheLordOfTime asked: Are devs automatically sponsors, and vice versa? | 16:39 |
coolbhavi | TheLordOfTime, yes as they can upload your changes into the archive they can sponsor you and in debin/ubuntu world to sponsor something you need to have necessary upload rights | 16:40 |
coolbhavi | moving ahead then :) | 16:41 |
coolbhavi | == This sounds like an interesting initiative, how can I help out? == | 16:41 |
coolbhavi | If you find this is an interesting initiative you can always help us to improve in the future with your feedback to us which is really valuable to us. | 16:42 |
coolbhavi | (Please find the feedback report of the last cycle here: http://fridge.ubuntu.com/2012/04/17/developer-advisory-team-report-12-04-feedback-from-new-contributors/ ) | 16:42 |
coolbhavi | == Alright! Who are the current members of the team and how to get in touch with them? == | 16:43 |
coolbhavi | The team in its full might is shown here: https://launchpad.net/~ubuntu-developer-advisory-team/+mugshots | 16:43 |
coolbhavi | For any feedback/rants please feel free to get in touch with any team member :) | 16:43 |
coolbhavi | Thats it I am done then :) Since time is left over anyone can ask me questions if any regarding the same :) | 16:45 |
ClassBot | NickE asked: Do members of your team have special skills in particular areas or can you all help with anything? | 16:47 |
coolbhavi | NickE, yes some of our team members do have I believe but we can help you out with anything thats related to ubuntu development | 16:48 |
ClassBot | skizobass asked: If I write apps & games with Python… Where I can submit me? | 16:48 |
coolbhavi | skizobass, we have the Application review board for reviewing apps in ubuntu and you can submit your app there | 16:50 |
ClassBot | There are 10 minutes remaining in the current session. | 16:50 |
ClassBot | marcosb asked: the application review board is for all softwares or just softwares for ubuntu software center "pay area"? | 16:51 |
coolbhavi | marcosb, the ARB is for reviewing free apps there is a separate commercial team to review commercial apps | 16:52 |
ClassBot | stadtfeld asked: Do you only provide help to current contributers or to anyone who is willing to get started as well? | 16:53 |
coolbhavi | stadtfeld, we provide help for new and experienced contributors alike | 16:54 |
ClassBot | alucardni asked: can I apply for upload rights if I've been contributing to Debian? | 16:54 |
ClassBot | There are 5 minutes remaining in the current session. | 16:55 |
coolbhavi | alucardni, yes based on the impact it has got on ubuntu and you can apply for PPU I think to upload your packages | 16:56 |
coolbhavi | alright then thanks everyone for turning up! | 16:57 |
coolbhavi | you can catch me on facebook at facebook.com/bshankar or on google+ too | 16:58 |
coolbhavi | Until next time bye to all! | 16:58 |
tumbleweed | Hello everyone | 17:00 |
tumbleweed | thanks coolbhavi, hope you all enjoyed is session | 17:00 |
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Fixing small bugs and forwarding the patches upstream - Instructors: tumbleweed | ||
tumbleweed | *his | 17:00 |
ClassBot | Logs for this session will be available at http://irclogs.ubuntu.com/2012/08/29/%23ubuntu-classroom.html following the conclusion of the session. | 17:00 |
tumbleweed | everyone having a good Ubuntu Developer Week? | 17:01 |
tumbleweed | Let's get an idea of how many people are here: please say hi in the chat channel | 17:01 |
tumbleweed | that's #ubuntu-classroom-chat, which is also the place to ask questions. Please start them with QUESTION: so the bot can pick them up | 17:01 |
tumbleweed | If you have any questions with any of this, when you go home and do this, afterwards | 17:01 |
tumbleweed | I suggest sticking your nose into #ubuntu-motu and asking there | 17:01 |
tumbleweed | it's full of friendly ubuntu developers | 17:01 |
tumbleweed | \o/ Glad to see such good attendance at these talks | 17:01 |
tumbleweed | so, I'm Stefano Rivera, an Ubuntu Developer and a Debian Developer | 17:02 |
tumbleweed | I live in (the not quite so sunny at the moment) South Africa | 17:02 |
tumbleweed | (and right now, I'm in a friends flat, with a laptop, in the corner, on a 3G connection. So hopefully I won't unexpectedly vanish) | 17:03 |
tumbleweed | I'm here to talk about dealing with upstreams | 17:03 |
* tumbleweed sees a few familiar faces here :P | 17:03 | |
tumbleweed | What do I mean by an upstream? | 17:03 |
tumbleweed | well, Ubuntu is made up of ~20 000 source packages, (which build ~40 000 binary packages) | 17:03 |
tumbleweed | us Ubuntu Developers don't write all of those ourselves. We only authored a tiny handful of them | 17:03 |
tumbleweed | everything else came from other projects | 17:04 |
tumbleweed | some of these are big projects like GNOME and KDE, which produce hundreds of packages | 17:04 |
tumbleweed | most are tiny little projects with one, or maybe half a dozen active contributors | 17:04 |
tumbleweed | these projects are our upstreams | 17:04 |
tumbleweed | they release new versions of their software, and we package it, make a few tweaks to get it to work nicely with the rest of Ubuntu, and ship it to users | 17:04 |
tumbleweed | then we are on the front-line of incoming bug reports, and have to forward the relevant ones back to the upstreams | 17:04 |
tumbleweed | sounds like fun, right :) | 17:04 |
tumbleweed | OK, I lied a bit there | 17:05 |
tumbleweed | I assume you all know that Ubuntu is derived from Debian | 17:05 |
tumbleweed | in fact, about 75% of packages in Universe are entirely unmodified from Debian | 17:05 |
tumbleweed | that's a very good thing | 17:05 |
tumbleweed | there's no need for those packages to be modified in Ubuntu | 17:05 |
tumbleweed | the vast majority of bugs that we'd encounter in them are relevant to Debian, Ubuntu, and (if except for packaging bugs, the original upstream) | 17:05 |
tumbleweed | So Debian is also an upstream of Ubuntu. A very special upstream which we care a lot about | 17:05 |
tumbleweed | We contribute a lot back to Debian (as much as possible) | 17:06 |
tumbleweed | https://wiki.ubuntu.com/Debian/ForUbuntuDevelopers | 17:06 |
tumbleweed | I can go into some more specifics of dealing with Debian, later | 17:06 |
tumbleweed | but, now, let's talk about upstreams in general | 17:06 |
tumbleweed | it makes sense to fix bugs them as close to the source as possible | 17:06 |
tumbleweed | that means the least duplication of effort, and shares the benefit as widely as possible | 17:07 |
ClassBot | marcosb asked: please tell us about packages nameclature, like hello_1.1-1ubuntu1.deb hello_1.1-1upstream1.deb etc. | 17:07 |
tumbleweed | sure | 17:07 |
tumbleweed | all .deb files are named package_version_arch.deb | 17:08 |
tumbleweed | the version can give some idea of the package's ancestory | 17:08 |
tumbleweed | packages that were written in Debian, only for Debian (and derivatives) have a version that looks like 1.0.0 | 17:09 |
tumbleweed | there's no '-1' at the end | 17:09 |
tumbleweed | if a debian developer packages an usptream version 1.0.0, her package will be versioned 1.0.0-1 | 17:09 |
tumbleweed | -1 meaning first upload to Debian | 17:09 |
tumbleweed | if we modify that package in Ubuntu, the version would be 1.0.0-1ubuntu1 | 17:09 |
tumbleweed | if we jumped to 1.0.1 in Ubuntu, before Debian got there, we'd call it 1.0.1-0ubuntu1 | 17:10 |
tumbleweed | etc. | 17:10 |
tumbleweed | of course, not everyone follows these rules, but almost all the time, they are relevant | 17:11 |
tumbleweed | so, I was talking about why we should work with upstreams: | 17:12 |
tumbleweed | if we submit a patch to the upstream developers, and they release a new release containing our bug fix, it benefits everyone: | 17:12 |
tumbleweed | users of other linux distributions, cygwin and macports users, people who installed this package themselves from scratch, etc. | 17:12 |
tumbleweed | and the upstream can probably give you useful review of your bug fix | 17:12 |
tumbleweed | nobody knows the code like they do | 17:12 |
tumbleweed | I hope at this point, you are aware of some the advantages of working well with our upstreams | 17:13 |
tumbleweed | (and that I might have written up some of this beforehand, for pasting) :P | 17:13 |
tumbleweed | How can you find a bug to work on? | 17:14 |
tumbleweed | We've tried to put a good collection of things for new developers to work on here: | 17:14 |
tumbleweed | https://wiki.ubuntu.com/UbuntuDevelopment/BugFixingInitiative | 17:14 |
tumbleweed | The first batches there are Ubuntu-only issues, which won't require any forwarding to anyone | 17:14 |
tumbleweed | So they're a good place to start if you Ubuntu Development is something you want to get into | 17:14 |
tumbleweed | The later batches affect more than just Ubuntu, and the patches for them will need to be sent upstream | 17:14 |
tumbleweed | (which is what we are really here to talk about today) | 17:14 |
tumbleweed | Another good way to get into Ubuntu Development is to find a package that you care about, that needs work | 17:15 |
tumbleweed | Something with a few (or even lots of) open bugs that really just needs someone to go through them | 17:15 |
tumbleweed | maybe we've even fixed a few bugs in it, and not sent the patches upstream | 17:15 |
tumbleweed | Ubuntu developers can be naughty and lazy :) | 17:16 |
tumbleweed | There are *lots* of packages like that in the archive | 17:16 |
tumbleweed | In Debian, every package has explicit Maintainers who are looking after them | 17:16 |
tumbleweed | But in Ubuntu, most packages don't have anyone paying any attention to them | 17:16 |
tumbleweed | I've tried to collect a list of especially neglected packages that aren't in Debian, here: | 17:16 |
tumbleweed | http://qa.ubuntuwire.org/neglected/ | 17:16 |
ClassBot | AmberJ_ asked: Quoting you from #ubuntu-classroom "if we modify that package in Ubuntu, the version would be 1.0.0-1ubuntu1" ... what if we don't modify Debian package in Ubuntu? | 17:16 |
tumbleweed | then it keeps the same version as Debian | 17:16 |
tumbleweed | as I said much earlier, most of the archive is entirely unmodified debian | 17:17 |
tumbleweed | we have a slightly different toolchain that'll build things a little differently | 17:17 |
tumbleweed | but most packages don't have modified source | 17:17 |
tumbleweed | How do you fix the bug? | 17:18 |
tumbleweed | That's a hard question to answer. It depends entirely on the bug | 17:18 |
tumbleweed | All I can really tell you about is how to get your hands on the source code and what to do once you've fixed it | 17:18 |
tumbleweed | dholbach will have covered the first part o fthat, yesterday | 17:18 |
tumbleweed | but let me remind you | 17:18 |
tumbleweed | install the packaging-dev package, it'll give you lots of useful tools | 17:19 |
tumbleweed | you can grab the source for an Ubuntu package by running: pull-lp-source PACKAGENAME | 17:19 |
ClassBot | marcosb asked: I learn how create patches in this session? | 17:20 |
tumbleweed | sure, that sounds like a useful thing to talk about | 17:20 |
tumbleweed | there are two common ways of dealing with source packages in Ubuntu. The traditional debian tools, and bzr | 17:20 |
tumbleweed | I'm going to mostly talk about the traditional tools because they are more widely applicable, and I find them faster | 17:21 |
tumbleweed | so, you've downloaded and extracted a source package with pull-lp-source | 17:22 |
tumbleweed | now, you see something obvious to fix | 17:22 |
tumbleweed | at this point, there could be several different things you need to do, thanks to a few different ways of packaging things | 17:23 |
tumbleweed | you can run the "what-patch" command to see how the package represents patches | 17:23 |
tumbleweed | let's assume that the package uses quilt patches, they are the most common these days. Hopefully the other systems will fade away | 17:24 |
tumbleweed | you'd run: quilt new MYPATCHNAME | 17:24 |
tumbleweed | then quilt edit FILENAME | 17:25 |
tumbleweed | then quilt refresh, which will build the patch | 17:25 |
tumbleweed | and you can find it in debian/patches | 17:25 |
tumbleweed | most of the time, when working on debian packages, that's how you'll be generating the patches | 17:26 |
tumbleweed | that patch you generated, you can now send to the upstream project | 17:27 |
tumbleweed | how do you find where they are? | 17:27 |
tumbleweed | well, let's start with Debian | 17:27 |
tumbleweed | every You can see more information about the package at http://packages.qa.debian.org/$PACKAGENAME | 17:28 |
tumbleweed | err ignore the every | 17:28 |
tumbleweed | so, for the hello package, go to http://packages.qa.debian.org/hello | 17:28 |
tumbleweed | at this point, I'm talking about source packages, not binary packages | 17:28 |
tumbleweed | as developers, we're almost entirely working with source pcakages | 17:28 |
tumbleweed | the binary packages are just smoething that'll be built when we are done | 17:29 |
tumbleweed | on that packages.qa.debian.org page (called the PTS, package tracking system) | 17:29 |
tumbleweed | you'll find a list of the debian bugs, in the top rigth corner | 17:30 |
tumbleweed | you can see who the debian maintainer is in the top left | 17:30 |
tumbleweed | and see the upload history in the middle | 17:30 |
tumbleweed | so, now we'd look through the debian bugs | 17:31 |
tumbleweed | there's currently only one | 17:31 |
tumbleweed | but if we saw the bug we were working on, there, we'd go and have a look at it, and see what progress there has been | 17:31 |
tumbleweed | maybe there's a patch on it? maybe it's been forwarded to the upstream | 17:32 |
tumbleweed | we can see that the bug there (bugs.debian.org/621716) has been forwarded upstream | 17:32 |
tumbleweed | we don't have a link to the upstream bug, though, it was just forwarded to an e-mail address | 17:32 |
tumbleweed | some usptream projects don't have formal bug trackers, and the best we can do is say "we mailed the author" | 17:33 |
ClassBot | marcosb asked: there's another patch mechanisms or just quilt? | 17:33 |
tumbleweed | yeah, I'm afraid so. there are two other common patch systems: dpatch and cdbs-simple-patch (but both are declining in popularity) | 17:34 |
tumbleweed | and some packages have no patch management system at all | 17:35 |
tumbleweed | that means that all the patches that debian & ubuntu have applied to the package are mixed together in one big diff | 17:35 |
tumbleweed | that's really easy to work with, but hard to understand what's going on in the patch | 17:35 |
ClassBot | calmi asked: is there a system that helps to avoid duplicates? | 17:37 |
tumbleweed | yes, look before you file new bugs | 17:37 |
tumbleweed | launchpad's bug filing interface is actually really good at this | 17:37 |
tumbleweed | after you've entered a title, it finds you similar bugs | 17:37 |
tumbleweed | the standard bug filing tool for Debian, reportbug, also presents a list of all open bugs for you to review, before filing yoru bug | 17:38 |
ClassBot | marcosb asked: Can you tell how generate packages with dpatch and dbs-simple-patch? | 17:38 |
tumbleweed | I won't cover those now, they are rare enough that we don't need to worry about them (I think) | 17:38 |
tumbleweed | let's rather just talk about packages that don't have any patch system at all | 17:38 |
tumbleweed | the easiest way to get a patch out of them | 17:39 |
tumbleweed | is to make your change, add a new changelog entry with dch (I assume dholbach covered that earlier) | 17:39 |
tumbleweed | and build a source package | 17:39 |
tumbleweed | then you can diff the old package to the new one with the "debdiff" tool | 17:39 |
tumbleweed | so, debdiff foobar_0.1-1.dsc foobar_0.1-1ubuntu1.dsc | 17:40 |
tumbleweed | and you'll get a patch that shows the difference between 0.1-1 and 0.1-1ubuntu1 | 17:41 |
tumbleweed | (sorry, lost 3g signal for a minute, there) | 17:42 |
tumbleweed | back to what I was saying before: | 17:42 |
tumbleweed | so, we've been looking at the debian bug tracker, and we don't see a bug that describes the issue we ware working on | 17:43 |
tumbleweed | now, we make a decsion: is the bug I'm working on a debian packaging bug? | 17:43 |
tumbleweed | if so, we'd better forward it to debian | 17:43 |
tumbleweed | is it an upstream bug, but something that's important enough that we should fix it in Debian while we wait for the upstream to fix it | 17:44 |
tumbleweed | or it affects a debian stable release, and is serious enough that they'd want to cherry-pcik the fix for the stable release | 17:44 |
tumbleweed | if so, we'd also forward it to debian | 17:44 |
tumbleweed | if we don't have a reason to forward it debian, we are just looking for the upstream authors | 17:45 |
tumbleweed | we can find them in a few ways | 17:45 |
tumbleweed | most packages helpfully have a Homepage field in the control file, tha ttells us where the upstream project is | 17:45 |
tumbleweed | if there is such a tag, you'll see a link to the homepage on the right side of the PTS | 17:45 |
tumbleweed | e.g the hello package has such a link: http://packages.qa.debian.org/hello | 17:46 |
tumbleweed | taking us to http://www.gnu.org/software/hello/ | 17:46 |
tumbleweed | and that page tells us that the hello bugtracker can be found on savannah http://savannah.gnu.org/projects/hello/ | 17:46 |
tumbleweed | eventually, we got there. | 17:46 |
tumbleweed | now, we can file a bug with them (after seeing if it's already there, or been fixed already) and giv them the patch we created | 17:47 |
tumbleweed | \o/ success | 17:48 |
ClassBot | jsjgruber-l85-p asked: Might not the upstream ask us things we don't know about how the original bug reporter found the bug, etc.? | 17:48 |
tumbleweed | that's very likely | 17:48 |
tumbleweed | many upstreams aren't particularly interested in linux distributions that ship "ancient" versions of their packages to users | 17:48 |
tumbleweed | so, the most useful thing you can do is see if the the current development version of their package still has the issue | 17:49 |
tumbleweed | how you do that will depend entirely on the project | 17:49 |
tumbleweed | I generally find it useful to reproduce the bug myself | 17:49 |
tumbleweed | then I know if I've fixed it or not, for a start | 17:49 |
tumbleweed | and I can place myself in the same position as the original reporter | 17:50 |
tumbleweed | and write a good bug report for the upstream | 17:50 |
tumbleweed | if only every bug was easily reproduced, though :P | 17:50 |
tumbleweed | any more questions? we have 10 mins left | 17:50 |
ClassBot | There are 10 minutes remaining in the current session. | 17:50 |
tumbleweed | oh, snap, ClassBot | 17:51 |
* tumbleweed gives ClassBot a cookie | 17:51 | |
tumbleweed | ok, well in that case, let me spend a few minutes talking about the debian bugtracking system | 17:52 |
tumbleweed | I'll happily be interrupted by questions, though | 17:52 |
ClassBot | jsjgruber-l85-p asked: What can you do if the Debian/upstream developer doesn't get back to you? | 17:52 |
tumbleweed | we can fix the issue in Ubuntu, and get on with lifet | 17:53 |
tumbleweed | *life | 17:53 |
tumbleweed | if the upstreams aren't responding, to anything, though, that may be a sign that they are no longer usefully maintaining their package | 17:53 |
tumbleweed | if they stop responding at all, and stop producing new releases, after a while, we'd remove the package from debian/ubuntu | 17:53 |
tumbleweed | (unless someone else takes over the upstream development) | 17:54 |
tumbleweed | so, I still have a couple of minutes, back to the BTS | 17:54 |
tumbleweed | debian's bug tracker (the BTS) lives at bugs.debian.org | 17:54 |
tumbleweed | the easy links for you are: bugs.debian.org/PACKAGE, and bugs.debian.org/BUG | 17:55 |
ClassBot | There are 5 minutes remaining in the current session. | 17:55 |
tumbleweed | you'll notice that there aren't any forms for adding comments or filing bugs | 17:55 |
tumbleweed | that's because the whole thing is driven by email | 17:55 |
tumbleweed | you may find that a little archaic, but it works fairly well | 17:56 |
ClassBot | ben72 asked: When the patch is very small, does it make sense to just post it as a comment in the bugtracker? | 17:56 |
tumbleweed | well, yes | 17:57 |
tumbleweed | that's pretty much how we forward patches | 17:57 |
tumbleweed | hopefully the bug trackre has some way of attaching a patch to a comment | 17:57 |
tumbleweed | but sometimes you just have to include the patch inline in the comment | 17:57 |
tumbleweed | and sometimes the patch is so trivial, that you just have to describe it and don't need a patch | 17:57 |
tumbleweed | if your patch is too big: you are probably better of breaking it up into multiple patches | 17:58 |
tumbleweed | split into logical ideas | 17:58 |
ClassBot | marcosb asked: after a add changelog entry and patch with quilt, i generate new source (debuild -us -uc) and thendebdiff? | 17:58 |
tumbleweed | debuild -uc -us -S | 17:58 |
tumbleweed | then debdiff | 17:58 |
tumbleweed | note the -S which builds a source package only, no binary packages | 17:59 |
tumbleweed | (it's *much* quicker to not build binaries) | 17:59 |
tumbleweed | ok, I guess I'm out of time | 17:59 |
tumbleweed | thanks everyone | 17:59 |
tumbleweed | hope to see you all getting involved, soon | 17:59 |
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: libmessagingmenu - Instructors: larsu | ||
ClassBot | Logs for this session will be available at http://irclogs.ubuntu.com/2012/08/29/%23ubuntu-classroom.html following the conclusion of the session. | 18:00 |
larsu | hi everyone | 18:01 |
larsu | I'm Lars, I'll talk a bit about the changes we've made to the messaging menu this cycle | 18:01 |
larsu | most importantly: libmessaging-menu, the new API for applications to integrate with the messaging menu | 18:02 |
larsu | please don't hesitate to ask questions anytime | 18:02 |
larsu | all the changes we've made have just landed in quantal a couple of days ago | 18:03 |
larsu | for those of you already running quantal: that's the reason some apps show up in the menu right now ;) | 18:03 |
larsu | let me just give a very short overview of the messaging menu | 18:04 |
larsu | I assume most people here will be familiar with it | 18:05 |
larsu | it's this little icon that sits in your panel, notifying you about incoming messages from various applications | 18:05 |
larsu | also, it let's you set a global chat status for all apps at once | 18:05 |
larsu | and it provides a way to launch messaging-related applications | 18:06 |
larsu | up until now, three apps were always shown in the menu (Chat, Mail, and Broadcast) | 18:06 |
larsu | starting from quantal, this will not be the case anymore: if no application is configured to show up in the menu, the menu will simply disappear | 18:07 |
larsu | also, all applications will be referred to by their "real" name and icon, so Chat --> Empathy, Mail --> Thunderbird and Broadcast --> Gwibber | 18:07 |
larsu | and ubuntu1 is gone from the messaging menu. It's not a messaging app anyway | 18:08 |
larsu | if you're interested in why the menu works the way it is, there is a design specification with all the rationale at https://wiki.ubuntu.com/MessagingMenu | 18:09 |
larsu | of course, we encourage application authors to integrate their apps with the menu | 18:10 |
larsu | (where it makes sense of course ;) ) | 18:10 |
larsu | !Q | 18:11 |
ClassBot | ironhalik asked: With the new messaging menu, what's the situation with backward compatibility with Precise and older releases? Should I develop with Quantal or Precise in mind for largest userbase? | 18:11 |
larsu | good question: the messaging menu in quantal is not backward compatible with the one in precise | 18:12 |
larsu | we pondered keeping that, but it was more work than it was worth | 18:12 |
larsu | to reach the biggest audience, you probably want to develop for precise, since that is the current release and it is an lts | 18:13 |
larsu | if you think you have cutting edge users that will mostly be on the new version of ubuntu, I recommend going with the new API | 18:14 |
larsu | it's much easier to use I am told ;) | 18:14 |
larsu | ironhalik, does that answer your question? | 18:14 |
larsu | so, each application gets a section in the messaging menu, which contains 3 types of items | 18:16 |
larsu | (1) the application launcher itself, with a litte triangle next to it if the application is running | 18:16 |
larsu | (2) shortcuts to commonly used actions (for example thunderbird has "Compose New Message" and "Contacts") | 18:17 |
larsu | (3) the most important one: message source (for example, Thunderbird will add a menu entry for each mailbox that has new messages) | 18:17 |
larsu | (1) and (2) are completely controlled by the applications .desktop file and cannot be changed while the application is running | 18:18 |
larsu | to make the shortcut actions (2) that you have defined in the .desktop file appear in the messaging menu, the "TargetEnvironment" or "OnlyShowIn" keys must contain "Messaging Menu" | 18:19 |
larsu | this is exactly the same way quicklists are handled for the launcher | 18:19 |
larsu | so, let's go ahead with a concrete example of how to use libmessaging-menu | 18:20 |
larsu | I'll paste a small python program line-by-line and explain what each line is doing | 18:21 |
larsu | first: you need the gir1.2-messagingmenu-1.0 package, which is installed by default in quantal | 18:22 |
larsu | as usual with gobject introspection, the first line of python is: | 18:22 |
larsu | >>> from gi.repository import MessagingMenu, GLib | 18:22 |
larsu | we'll need GLib later for the mainloop | 18:23 |
larsu | as an aside: nothing will get send to the messaging menu until you run the main loop | 18:23 |
larsu | next, you need to create a MessagingMenuApp object, which represents one application section in the menu | 18:24 |
larsu | >>> mmapp = MessagingMenuApp(desktop_id="thunderbird.desktop") | 18:25 |
larsu | you pass a desktop file id into the constructor, from which the items (1) and (2) I talked about earlier will be created | 18:25 |
larsu | in this case, we're pretending to be thunderbird | 18:25 |
larsu | to notify the messaging menu that our application is running, we call | 18:26 |
larsu | >>> mmapp.register() | 18:26 |
larsu | this does two things: if the application has never been in the menu before, a section will be created for it | 18:26 |
larsu | and secondly, the application will be marked as "running" (with the little triangle next to it) | 18:27 |
larsu | okay, now let's add a message source to the section: | 18:28 |
larsu | >>> mmapp.append_source_with_count("inbox", None, "Inbox", 3) | 18:29 |
larsu | this will append a new item with the label "Inbox" with a count of 3, which is shown on the right side of the menu item | 18:29 |
larsu | the first parameter of this call is a unique identifier, the second one an optional icon (or None if you don't need one) | 18:30 |
larsu | the third one is the label, and the fourth a count | 18:30 |
larsu | analogous, there's also append_source_with_time, which you can pass a time stamp | 18:30 |
larsu | the messaging menu will display the amount of time passed since that timestamp for these items | 18:31 |
larsu | (for example, empathy uses that for incoming instant messages) | 18:31 |
larsu | if you want the messaging menu envelope in the panel to turn blue, because the received notification is an important one: | 18:32 |
larsu | >>> mmapp.draw_attention("inbox") | 18:32 |
larsu | you just pass that function the id that we used to create the item | 18:32 |
larsu | now, we want to get notified when the user selects the source and - for the sake of this example - simply print which source was activated | 18:34 |
larsu | so we first need a small function | 18:34 |
larsu | >>> def source_activated(mmapp, source_id): print id | 18:34 |
larsu | sorry, that's "print source_id" of course | 18:34 |
larsu | now, we can connect to the mmapp's "activate-source" signal | 18:34 |
larsu | >>> mmapp.connect("activate-source", source_activated) | 18:35 |
larsu | the source will be automatically removed when the user clicks on it | 18:35 |
larsu | to try this out, let's spin up a main loop: | 18:36 |
larsu | >>> GLib.MainLoop().run() | 18:36 |
larsu | the messaging menu will automatically mark your application as "not running" when it stops running, no need to do anything | 18:37 |
larsu | however, if you want to completly remove the application from the menu, call | 18:38 |
larsu | >>> mmapp.unregister() | 18:38 |
larsu | your application should remove any sources from the menu when the user gets to them in some other way | 18:39 |
larsu | for example, when thunderbird is opened from the launcher and the user reads all messages that way | 18:40 |
larsu | call mmapp.remove_source("inbox") to do this | 18:40 |
larsu | there's not much more to it :) | 18:40 |
larsu | unfortunately, I didn't manage to upload the API documentation in time for this talk, but it will appear on developer.ubuntu.com soon | 18:41 |
larsu | and since it's a gobject-based library, your favorite programming language is most likely supported | 18:41 |
larsu | hm, I've been talking all this time: are there any questions? | 18:41 |
larsu | I've pasted our little example here: http://pastebin.ubuntu.com/1174375/ | 18:43 |
ClassBot | There are 10 minutes remaining in the current session. | 18:50 |
ClassBot | There are 5 minutes remaining in the current session. | 18:55 |
ClassBot | marcosb asked: can i implement this example in ruby? | 18:55 |
larsu | marcosb, to be honest, I'm not sure if there is gobject-introspection for ruby (ruby doesn't seem to be very popular amongst linux desktop programmers) | 18:56 |
larsu | if there is, then you can implement this example in ruby | 18:57 |
larsu | a quick google search seems to suggest that they exist | 18:57 |
larsu | well, not many questions: hope you enjoyed it anyway. Bye! | 18:58 |
ClassBot | ironhalik asked: Regarding the compatibility with Precise - If I was developing on 12.10 machine, how can I take the API differences into account to stay compatible with Precise? | 19:00 |
=== Alexander is now known as Guest11820 | ||
=== 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: Ubuntu Juju Tips and Tricks - Instructors: m_3 | ||
ClassBot | Logs for this session will be available at http://irclogs.ubuntu.com/2012/08/29/%23ubuntu-classroom.html following the conclusion of the session. | 19:00 |
m_3 | thanks larsu | 19:00 |
m_3 | hi all | 19:00 |
m_3 | I'll be talking about some fairly new tools we've recently added to Ubuntu Server | 19:01 |
m_3 | I've got notes and a demo session set up at the following URL: | 19:02 |
=== sayan_ is now known as sayan | ||
m_3 | http://ec2-107-22-155-155.compute-1.amazonaws.com/ | 19:02 |
m_3 | you can either go there in a browser or just ssh directly in | 19:02 |
m_3 | the username and password are both 'guest' | 19:02 |
m_3 | I've got a little overview of where we are in the talk and then a demo session open as well | 19:02 |
m_3 | ok, so Juju! | 19:03 |
m_3 | juju's a set of tools that help out when you're managing services involving multiple servers... real or virtual | 19:04 |
m_3 | in fact... we're really trying to shift the way people think about configuring services on ubuntu server | 19:04 |
m_3 | instead of thinking about configuring _servers_ | 19:04 |
m_3 | you configure the _services_ themselves | 19:04 |
m_3 | let's look at some simple examples first | 19:04 |
m_3 | (dragging heels a bit here to let peeps get connected to the demo site) | 19:05 |
m_3 | so if we think about a simple stack of services... wordpress for example | 19:05 |
m_3 | if you're putting this together on servers, you've got a bit of a pain in waiting for one server to reach a certain point of the install, then going to the other one... adding some config... then waiting again | 19:06 |
m_3 | this really is a synchronization problem or what we like to call "service orchestration" | 19:07 |
m_3 | well juju solves that problem well | 19:07 |
m_3 | we can use a handful of really simple examples to deploy a stack of services | 19:08 |
m_3 | I'll deploy some in real-time while we're chatting | 19:08 |
m_3 | and that's really it... we just need to wait for those instances to start up | 19:09 |
m_3 | first question to ask is where are these starting up at? | 19:09 |
m_3 | these are spun up using a "local" provider (note the addresses) | 19:10 |
m_3 | ok, well no addresses yet | 19:10 |
m_3 | :) | 19:10 |
m_3 | it's building out little ubuntu server instances using lxc containers | 19:10 |
m_3 | well local provider is only one type | 19:10 |
m_3 | we can use juju to control services on ec2 cloud, hp cloud (openstack in general) | 19:11 |
m_3 | as well as orchestrate services on bare metal with MaaS (metal-as-a-service) | 19:11 |
m_3 | I'll show a couple of examples of providers as we go | 19:11 |
m_3 | it's worth noting that this is somewhat of a "toy" example | 19:12 |
m_3 | but don't be fooled by that... | 19:12 |
m_3 | we can do more sophisticated stacks... consider the mature mediawiki stack for a second | 19:13 |
m_3 | we'll cover more details here, but I just want to point out that we can use juju to manage a real production-grade stack of services | 19:13 |
m_3 | mysql with read-only replicas | 19:14 |
m_3 | multiple wikis | 19:14 |
m_3 | each with heads fronting multiple nodes | 19:14 |
m_3 | all attached to the databases with monitoring and caching | 19:14 |
m_3 | etc | 19:14 |
m_3 | it's pretty cool from that regard | 19:14 |
m_3 | so let's back up to our simple example | 19:14 |
m_3 | so the services we can deploy are numerous | 19:15 |
m_3 | the template sorta things we use to deploy services are called "charms" | 19:16 |
m_3 | we've got lots of them already as we saw in the more complex example | 19:16 |
m_3 | jujucharms.com shows lots more | 19:16 |
m_3 | ok, let's check in on the simple stack we spun up a sec ago | 19:16 |
m_3 | ok, we're golden | 19:17 |
m_3 | note that we have two service units... mysql/0 and wordpress/0 | 19:17 |
m_3 | yes, the /0 implies that there could even be a /1000 | 19:17 |
m_3 | multiple "units" of the same "service" | 19:17 |
m_3 | juju scales really well, but we'll get back to that in a big | 19:17 |
m_3 | s/big/bit/ | 19:18 |
m_3 | ok note that these services have ip addrs | 19:18 |
m_3 | well they've each got dedicated lxc containers | 19:18 |
m_3 | we could... for instance... ssh into one of them | 19:18 |
m_3 | so I've ssh'd to a local instance inside of this one | 19:18 |
m_3 | similarly, if we look at the same stack up on somewhere like ec2 | 19:19 |
m_3 | (I spun this up before the talk) | 19:19 |
m_3 | node the addresses | 19:19 |
m_3 | and familiar service units | 19:19 |
m_3 | mysql/0 | 19:19 |
m_3 | etc | 19:19 |
m_3 | we can verify that the charm is up and running properly... | 19:21 |
m_3 | which is as expected once wordpress is up | 19:21 |
m_3 | note that when we're working on the local provider things respond a bit faster than when using remote cloud providers | 19:22 |
m_3 | ok, so charms are the templates we use for deploying services | 19:23 |
m_3 | and we've seen a little bit of the local provider's usefulness | 19:23 |
m_3 | I'll leak a couple of other tips early here... charmtools | 19:23 |
m_3 | ok, so a charm is pretty simple | 19:24 |
m_3 | it's capturing the community's best practice for how to deploy and scale a service | 19:25 |
m_3 | but it does it through a fairly simple structure | 19:25 |
m_3 | the hooks/ are the magic | 19:25 |
m_3 | they're called by juju at the right time | 19:25 |
m_3 | _that_'s what provides the synchronization / orchestration | 19:25 |
m_3 | the metadata for each charms shows how the "plug" together | 19:27 |
m_3 | note the provides and requires | 19:27 |
m_3 | tic tock | 19:28 |
m_3 | here we can see how the ones we deployed earlier fit together | 19:28 |
m_3 | a couple more things about charms | 19:29 |
m_3 | the hooks are just scripts | 19:29 |
m_3 | then can be written in any language with an ubuntu runtime | 19:29 |
m_3 | or even compiled | 19:29 |
m_3 | they've just gotta play nicely with shell exit codes for juju to know if they errored out or not | 19:30 |
m_3 | ok, so the talk's supposed to be about tips-n-tricks and not just all about charms | 19:30 |
m_3 | before I move on, are there any questions about juju in general or charms and the basics of how they work? | 19:31 |
m_3 | ok, so tips | 19:32 |
m_3 | we already saw "local provider" | 19:32 |
m_3 | basics are... use it first and it's a lot quicker | 19:32 |
m_3 | it really makes for a somewhat production-realistic dev environment | 19:32 |
m_3 | concurrency issues'll show up earlier here than other local dev methods | 19:33 |
m_3 | and boom | 19:33 |
m_3 | now I've caused all sorts of problems for development if the code doesn't handle scaling or concurrencly | 19:34 |
m_3 | it's cheap and easy for developers to test that out now... _before_ it gets into production | 19:34 |
m_3 | we see haproxy is pending | 19:34 |
m_3 | and that we now have a second unit of wordpress | 19:35 |
m_3 | if you're having troubles with ajaxterm, please just ssh directly into the instance | 19:35 |
m_3 | there's a limit to how many peeps can connect to ajaxterm at once in this incarnation of the byobu-classroom charm | 19:35 |
m_3 | and yes, we _are_ eating dogfood here :) | 19:36 |
m_3 | ok, so local providers cool | 19:36 |
m_3 | next tip is about managing environments in production | 19:36 |
m_3 | so juju manages security and access to nodes via ssh | 19:37 |
m_3 | if you don't tell it otherwise, it injects the cli user's default ssh keys | 19:37 |
m_3 | well in order for either a.) me to manage the env from multiple machines, or b.) multiple people to manage the environment | 19:37 |
m_3 | then you've got to either share the private side of that key | 19:38 |
m_3 | um... don't do that...it's bad :) | 19:38 |
m_3 | or you set juju up with a list of additional keys to inject into everything | 19:38 |
m_3 | juju is configured with an environments.yaml file in ~/.juju/environments.yaml | 19:38 |
m_3 | I'll show you a sanitized version | 19:39 |
m_3 | I've got three providers in here... local, ec2, and hp's openstack cloud | 19:39 |
m_3 | the way to add other users to manage an environment is just the `authorized-leys` tag | 19:40 |
m_3 | we can take a peek in the local mysql | 19:40 |
m_3 | sorry, local provider sometimes behaves a little differently | 19:41 |
m_3 | but we see the keys we asked it to inject | 19:41 |
m_3 | the last one is for that instance we're controlling from | 19:41 |
m_3 | ok, so next tip | 19:41 |
m_3 | when we deploy like this... | 19:42 |
m_3 | we were deploying straight from the ubuntu charmstore | 19:42 |
m_3 | where you'll get the latest and greatest | 19:42 |
m_3 | juju caches the version of the charm it deploys with, but only for the lifetime of the service | 19:43 |
m_3 | that's so I can add extra units later (like we did with wordpress) and it'll use the same version as the first one | 19:43 |
m_3 | but in general, in production it's a good idea to deploy services you care about from local repos | 19:43 |
m_3 | note the `--repository` in the second script | 19:44 |
m_3 | that's going to use the local one | 19:44 |
m_3 | what I recommend here is that for infrastructure services like haproxy or mysql | 19:44 |
m_3 | things you'd never really tweak that much except for the (extensive) config they offer | 19:44 |
m_3 | deploy those services from the store | 19:45 |
m_3 | custom charms or charms for things that're critical to your infrastructure.... deploy from local repositories | 19:45 |
m_3 | it's fine to mix and match within a single environment | 19:45 |
m_3 | now our local env has some charms from the store and some from local | 19:46 |
m_3 | you can tell from the namespace 'cs' -vs- 'local' | 19:46 |
m_3 | ok, next tip for production | 19:46 |
m_3 | I usually set up a dedicated "client" environment to manage a production environment | 19:47 |
m_3 | we leave a tmux session up that has the right views into the infrastructure | 19:47 |
m_3 | then people can attach/detach at will | 19:47 |
m_3 | I've found this easier to manage than to make sure every ops person in the mgmt group has the right cli setup | 19:48 |
m_3 | ok, just noticed the time... | 19:48 |
m_3 | there's some cool ones left | 19:48 |
m_3 | juju ssh takes args | 19:48 |
m_3 | so... | 19:48 |
m_3 | that's really useful | 19:50 |
m_3 | ok, so next trick | 19:50 |
ClassBot | There are 10 minutes remaining in the current session. | 19:50 |
m_3 | jitsu is short for 'juju-jitsu' | 19:50 |
m_3 | it's pretty much just a set of juju plugins | 19:50 |
m_3 | lets you pipe juju status to gource | 19:50 |
m_3 | (can't demo this here... but if you haven't seen gource, google it it rocks!) | 19:51 |
m_3 | lets you do things like http://www.youtube.com/watch?v=Jfnxl1Kh9SY&feature=g-upl | 19:51 |
m_3 | the coolest | 19:51 |
m_3 | and I mean paradigm-shifting coolest thing in this talk | 19:52 |
m_3 | is the ability to export and import between environments | 19:52 |
m_3 | that means between _providers_ even | 19:52 |
m_3 | I can slurp my data out of one region and into another | 19:52 |
m_3 | we'll do A->B b/c it's simple | 19:53 |
m_3 | and yes, that worked | 19:54 |
m_3 | here's vid of local->hp http://www.youtube.com/watch?v=Jfnxl1Kh9SY&feature=g-upl | 19:54 |
m_3 | and vid of ec2->hp http://www.youtube.com/watch?v=HUtR3_YlKXU&feature=g-upl | 19:55 |
m_3 | sorry they're pretty raw (dry), but they were backup videos for a demo in case we lost networking at oscon | 19:55 |
ClassBot | There are 5 minutes remaining in the current session. | 19:55 |
m_3 | note that this doesn't move data | 19:55 |
m_3 | we'd have to do something like the 'juju ssh -e ec2-A mysqldump | juju ssh -e ec2-B mysql' | 19:56 |
m_3 | ok, that's all folks | 19:56 |
m_3 | I'll hang around and answer questions in #ubuntu-classroom-chat | 19:56 |
m_3 | but we live in #juju during mostly west europe and us hours | 19:57 |
m_3 | thanks! | 19:57 |
ClassBot | Logs for this session will be available at http://irclogs.ubuntu.com/2012/08/29/%23ubuntu-classroom.html | 20:00 |
=== ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || | ||
=== keffie_jayx is now known as effiejayx | ||
mo | mo | 23:25 |
=== mo is now known as Guest26045 |
Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!