*** Ninno has quit IRC | 00:56 | |
*** Fujitsu has quit IRC | 01:19 | |
*** Fujitsu has joined #schooltool | 01:31 | |
*** didymo has quit IRC | 03:43 | |
*** wjohnsto has quit IRC | 03:43 | |
*** Lumiere has quit IRC | 03:43 | |
*** wjohnsto has joined #schooltool | 03:44 | |
*** didymo has joined #schooltool | 03:44 | |
*** Lumiere has joined #schooltool | 03:44 | |
*** pcardune has joined #schooltool | 04:00 | |
*** liuwei has joined #schooltool | 04:45 | |
*** liuwei has left #schooltool | 04:50 | |
*** smalekgh has joined #schooltool | 07:00 | |
*** smalekgh has left #schooltool | 07:05 | |
*** didymo has quit IRC | 08:04 | |
*** pcardune has quit IRC | 09:04 | |
*** pcardune has joined #schooltool | 09:05 | |
*** pcardune has quit IRC | 09:36 | |
*** mgedmin has joined #schooltool | 10:29 | |
*** lisppaste5 has quit IRC | 10:50 | |
*** lisppaste5 has joined #schooltool | 10:57 | |
*** pcardune has joined #schooltool | 11:10 | |
*** pcardune has quit IRC | 11:26 | |
*** jfroche__ has joined #schooltool | 12:10 | |
*** mgedmin has quit IRC | 16:56 | |
*** smalekgh has joined #schooltool | 17:55 | |
*** smalekgh has quit IRC | 17:59 | |
*** CPCarey11 has joined #schooltool | 18:04 | |
*** bnguyen has joined #schooltool | 18:06 | |
*** jelkner has joined #schooltool | 18:29 | |
jelkner | wjohnsto: william, you're early | 18:29 |
---|---|---|
bnguyen | jelkner: william isn't here right now | 18:34 |
wjohnsto | jelkner: I am here, had to take a shower | 18:35 |
wjohnsto | can't be smelly for class | 18:35 |
jelkner | wjohnsto: did you get my email about the change in the first sprint? | 18:36 |
wjohnsto | yes I did | 18:37 |
jelkner | great | 18:37 |
*** smalekgh has joined #schooltool | 18:38 | |
*** Makorihi has joined #schooltool | 18:45 | |
jelkner | bnguyen and wjohnsto: do you know if linda fixed your bug in lesson 5? | 18:46 |
bnguyen | yes she did | 18:47 |
jelkner | excellent! | 18:47 |
*** mlinnell has joined #schooltool | 18:47 | |
wjohnsto | I'm going to setup the TS server if anyone has it and wants to use it | 18:47 |
*** pcardune has joined #schooltool | 18:48 | |
jelkner | pcardune: morning, teach! | 18:50 |
*** kjcole has joined #schooltool | 18:50 | |
pcardune | jelkner: you really love calling me "teach" | 18:50 |
jelkner | remember, i want abt 10 minutes at the beginning of class for house keeping | 18:51 |
pcardune | don't worry... I remember | 18:51 |
smalekgh | house keeping == ??? | 18:51 |
jelkner | smalekgh: sharing information and such | 18:51 |
smalekgh | ooooh... information... *stares in wonder* >_< | 18:52 |
jelkner | smalekgh: patience... it will all be clear soon ;-) | 18:53 |
* smalekgh continues to stare in wonder | 18:53 | |
wjohnsto | I have a teamspeak server if you know what it is and want to use it | 18:54 |
jelkner | wjohnsto: better to work that out the week ahead of time | 18:55 |
jelkner | let's shoot for next class | 18:55 |
wjohnsto | sounds good | 18:55 |
*** Mounika has joined #schooltool | 18:56 | |
wjohnsto | I was just saying for anyone who might already have it, it's easy to setup | 18:56 |
jelkner | you should also prepare folks using the mailing list ahead of time | 18:56 |
*** tehminkeh has joined #schooltool | 18:56 | |
jelkner | so they can have software installed before class starts | 18:56 |
wjohnsto | I'll write up a tutorial or something like that on Monday then | 18:56 |
jelkner | great | 18:57 |
*** AVN` has joined #schooltool | 18:58 | |
*** Preetam has joined #schooltool | 18:59 | |
* wjohnsto is William Johnston, "Hello!" | 18:59 | |
* AVN` is Chris B | 19:00 | |
* jelkner is Jeff Elkner, "Good morning!" | 19:00 | |
* Preetam is Preetam | 19:00 | |
* mlinnell is Mary L | 19:00 | |
* tehminkeh is Stephen Drodge | 19:00 | |
* smalekgh is Masood M, and wonders why attendance is being taken BEFORE class <_< | 19:00 | |
* pcardune is the "teach" | 19:00 | |
* bnguyen is Brittney N | 19:00 | |
* Mounika is Mounika G | 19:00 | |
* tehminkeh thinks the last one might've been a bit obvious | 19:01 | |
* CPCarey11 is Chris C | 19:01 | |
* Makorihi is Jama Mohamed | 19:01 | |
jelkner | OK, good morning all! | 19:01 |
pcardune | take it away jelkner... | 19:01 |
* kjcole is Kevin Cole (with bad network connectivity) | 19:01 | |
jelkner | I asked paul for a few minutes to update you all on the internship process | 19:02 |
* smalekgh is Masood M, and wonders why attendance is being taken BEFORE class <_< | 19:02 | |
smalekgh | ack, sorry | 19:02 |
smalekgh | hit the enter key by accident | 19:02 |
jelkner | it is now time to start getting internship agreements handed out, signed, and returned | 19:02 |
jelkner | here is how i would like the process to work: | 19:03 |
jelkner | 1. we match two of you who would like to work together with a project | 19:03 |
jelkner | 2. we get you both the internship agreements and discuss sprint participation and scheduling | 19:03 |
jelkner | 3. you show the agreement to your parents, you and they sign-in, dave welsh and i sign it, and we are off | 19:04 |
tehminkeh | does everyone basically automatically get accepted? | 19:04 |
tehminkeh | or do some of us "get cut" | 19:04 |
Makorihi | i think he said something about 'half way' | 19:05 |
*** nitromaster has joined #schooltool | 19:05 | |
jelkner | i haven't seen anyone yet whose performance would warrent "cutting" | 19:05 |
jelkner | you are doing a great job! | 19:05 |
nitromaster | sorry im late, im Andrew Rodriguez | 19:06 |
jelkner | anyone who will be home tomorrow between 4 and 7 pm, please email me at: jeff@elkner.net | 19:06 |
smalekgh | what shall the e-mail contain? | 19:06 |
jelkner | send me your phone number and i will begin making calls to talk with you | 19:06 |
jelkner | another thing is that we are not having an Atlanta sprint | 19:07 |
jelkner | we are moving it to ACC so that more of you can participate | 19:08 |
jelkner | paul will be coming here | 19:08 |
jelkner | i'm almost out of time, so two more quick things: | 19:08 |
jelkner | 1. please sign up for the March 17 sprint if you can make it | 19:08 |
jelkner | http://wiki.python.org/moin/ArlingtonSprint | 19:08 |
jelkner | 2. please send me the email if you will be home tomorrow between 4 and 7 with your phone number | 19:09 |
jelkner | that's all i have | 19:09 |
smalekgh | uh, if it isn't tomorrow, then when? | 19:09 |
jelkner | pcardune: teach, thanks for the time! | 19:09 |
jelkner | the 17th would be the next time | 19:09 |
jelkner | i'll keep setting up times until i've talked with everyone | 19:10 |
pcardune | ok, i guess it is my turn to speak now | 19:10 |
pcardune | Last class was two weeks ago, so I hope none of you have forgotten all the zope3 you learned | 19:11 |
pcardune | does anyone remember what we did last week? | 19:11 |
tehminkeh | nothing | 19:11 |
Makorihi | we made containers | 19:11 |
Preetam | oh yea | 19:11 |
smalekgh | the thingers that held thingers (and only one kind of thinger) | 19:11 |
pcardune | ok, good... just checking that people are awake | 19:11 |
pcardune | two weeks ago we didn't finish the containers and they still don't do a whole lot | 19:12 |
tehminkeh | i still maintain that we didnt do anything last week | 19:12 |
pcardune | the idea of making your own containers is so that they can really work for you | 19:12 |
pcardune | tehminkeh: ... *you* didn't do anything last week... I know *I* did something | 19:12 |
pcardune | we want containers to help us manage contacts in some way | 19:13 |
tehminkeh | pcardune: i was kidding, because we didnt have class last week | 19:13 |
pcardune | tehminkeh: i know... I *still* did something lat week though.... | 19:13 |
wjohnsto | let's start class! | 19:14 |
pcardune | so what do we want a container to do? | 19:14 |
pcardune | part of that question is, what does a container do already? | 19:14 |
Makorihi | to contain things | 19:14 |
wjohnsto | hold contacts and contact information | 19:14 |
AVN` | it can add stuff | 19:14 |
smalekgh | it holds stuff | 19:14 |
pcardune | right now we get a list of the objects it contains... but it that list really helpful to us? | 19:14 |
pcardune | what gets displayed? | 19:14 |
pcardune | the object names (not any other information) | 19:14 |
pcardune | and the object names can be pretty ugly | 19:15 |
pcardune | they are just what get used in the url | 19:15 |
pcardune | So it might be nicer if our container displayed first and last name | 19:15 |
pcardune | or maybe last and first name | 19:15 |
pcardune | so we wouldn't have to remember what we named the contact object | 19:15 |
pcardune | so let's say we want the container to display all the contacts, but with "LastName, FirstName" isntead of the object name | 19:16 |
pcardune | what is the first thing we are going to do for this new functionality? | 19:16 |
nitromaster | a view | 19:17 |
pcardune | before that... | 19:17 |
CPCarey11 | __repr__() | 19:17 |
pcardune | this is almost a trick question | 19:17 |
wjohnsto | can't we do it in the ZMI | 19:17 |
pcardune | no... we can't do it in the ZMI, i'm not sure what you are thinking of there | 19:18 |
pcardune | but I'm thinking about writing functional tests | 19:18 |
pcardune | so open up your functional tests and add some tests for this functionality | 19:18 |
pcardune | notice I will be helping you less now with some of the tasks we have already covered (like functional tests) | 19:19 |
pcardune | but if you have questions, do ask | 19:19 |
pcardune | I also recommend creating a additional contacts in the functional tests so that you have something to play with | 19:19 |
pcardune | I'll post what I have too | 19:21 |
lisppaste5 | pcardune pasted "browser.txt" at http://paste.lisp.org/display/37664 | 19:22 |
pcardune | after writing your test, you should run them just to make sure they are actually failing (remember we right failing tests, then write code to make them pass) | 19:22 |
pcardune | let me know when you have something written | 19:24 |
pcardune | ok, well i'm going to keep going, and if you get behind you can copy what I've pasted | 19:30 |
pcardune | Since we specified the contactcontainer.pt file as the template for this page, we have to create that page template. | 19:30 |
pcardune | I like to to create page templates by first copying an existing one and then editing it. This way I don't have to remember all the names of the macros I am looking for. | 19:31 |
pcardune | So I would copy viewcontact.pt to contactcontainer.pt and then rewrite what's inside the body | 19:32 |
pcardune | we want a tal:repeat to repeat over the contents of the container | 19:32 |
pcardune | and remember that since this view is registered for the container... the context variable will be the container | 19:32 |
pcardune | we can grab the contents of the container using the "values" method | 19:33 |
pcardune | it has the same API of a python dictionary | 19:33 |
pcardune | when repeating, we want to create links that point to the actual contact object | 19:34 |
pcardune | oh, you know what, i accidentally skipped something | 19:34 |
lisppaste5 | pcardune pasted "configure.zcml" at http://paste.lisp.org/display/37665 | 19:34 |
pcardune | that is how I have registered a new page in configure.zcml | 19:34 |
CPCarey11 | I have a question about our functional tests | 19:35 |
pcardune | go ahead | 19:35 |
CPCarey11 | when we display the contents of our container.. | 19:35 |
CPCarey11 | how do we determine in which order the names will be displayed? | 19:36 |
pcardune | that is a good question | 19:36 |
pcardune | one way to determine the order is to wait and find out (that's what I did) | 19:36 |
AVN` | wait what are we doing to contactcontainer.pt? | 19:36 |
CPCarey11 | oh ok | 19:36 |
pcardune | so now I can tell you that the order is alphabetical by the name of the contact object | 19:36 |
pcardune | AVN`: we are about to create contactcontainer.pt | 19:37 |
CPCarey11 | oh thank you | 19:37 |
AVN` | whats tal:repeat ? | 19:37 |
pcardune | remember the tal:content attribute? | 19:37 |
pcardune | the tal:repeat attribute is another tal attribute that does cool stuff | 19:37 |
pcardune | it is just a loop | 19:37 |
AVN` | how do we use it? | 19:37 |
pcardune | so when we write: <div tal:repeat="contact context/values"> | 19:38 |
pcardune | in python that would look like: for contact in context.values() | 19:38 |
pcardune | then the div will be created multiple times, once for each contact | 19:38 |
pcardune | and any tales inside the repeat has access to the "contact" variable | 19:38 |
pcardune | just like in python for loops | 19:39 |
AVN` | oh, I see | 19:39 |
pcardune | here is my contactcontainer.pt file | 19:39 |
lisppaste5 | pcardune pasted "contactcontainer.pt" at http://paste.lisp.org/display/37667 | 19:39 |
pcardune | inside that div we have a link | 19:40 |
pcardune | and the link has dynamically generated href attributes and a dynamically generated content | 19:40 |
pcardune | when we write tal:attributes="href contact/@@absolute_url" it sets the href attribute to the url of the contact object | 19:41 |
pcardune | the @@ part says that this is a view lookup | 19:41 |
pcardune | we will talk about those more later | 19:41 |
pcardune | or actually, now is a good time to talk about them | 19:42 |
pcardune | remember that pages are views | 19:42 |
pcardune | we can actually access all of our pages with the @@ in front of the name of the page | 19:42 |
pcardune | (like @@index.html) | 19:42 |
wjohnsto | I think I've witnessed that | 19:42 |
pcardune | @@absolute_url is a special view that zope has which returns just a plain string with the url of the object | 19:43 |
pcardune | in fact, you can go to any object in your ZMI and just add @@absolute_url to the end of the url and see what you get | 19:43 |
wjohnsto | you get what the URL is | 19:44 |
pcardune | I don't know if I have assigned this before, but there is going to be homework for next week | 19:44 |
pcardune | the homework will be to read over the zope page template reference | 19:44 |
pcardune | which can be found here: http://www.zope.org/Documentation/Books/ZopeBook/2_6Edition/AppendixC.stx | 19:44 |
smalekgh | this is going to be the absolute first time when I save homework to the bookmarks folder in firefox... | 19:45 |
pcardune | so hopefully everyone understands the rest of the contactcontainer.pt file | 19:45 |
pcardune | so start up your zope servers and try it out | 19:46 |
AVN` | darn, error | 19:48 |
pcardune | so what's next? | 19:48 |
*** Aiste has joined #schooltool | 19:49 | |
pcardune | well, the user stories on the wiki ask for the contacts to be ordered by last name | 19:49 |
pcardune | Right now they are ordered based on the Object Name we specified when adding the objects (i.e. paulcarduner and jeffelkner). | 19:49 |
pcardune | So change your functional tests so that the contacts are in fact ordered by last name | 19:51 |
pcardune | and rerun the tests to make sure they fail | 19:51 |
pcardune | Alphabetical ordering constitutes a bit more logic than we can handle in a page template so we will have to create a view class for the container. Remember the view class we had for editing a contact? | 19:52 |
AVN` | please slow down a bit | 19:53 |
wjohnsto | the Contact Class? | 19:53 |
pcardune | yes | 19:53 |
wjohnsto | class Contact(persistent.Persistent) | 19:54 |
pcardune | wjohnsto: no, actually it was the ContactView class in browser.py | 19:54 |
pcardune | well we are going to create a new view class in browser.py called ContactContainerView | 19:55 |
pcardune | but first you should register this class for the page by adding a class attribute to the page declaration pointing to zcontact.browser.ContactContainerView | 19:55 |
pcardune | Now we need to create the ContactContainerView class in a file called browser.py. So as we create this class, let's think about what a browser view does again. | 19:59 |
*** Mattva01 has joined #schooltool | 19:59 | |
pcardune | Remember that a browser view takes an object (the context of the page we are displaying) and a request (the HTTP request from the users web browser) and does stuff with them. | 19:59 |
AVN` | how do we add the class atribute to the page decleration? | 20:00 |
pcardune | just put in: class="zcontact.browser.ContactContainerView" | 20:01 |
pcardune | in the browser:page tag that is registered for the IContactContainer interface | 20:01 |
AVN` | ok | 20:02 |
pcardune | continuing on: Also, the browser view class can be accessed from the page template through the view variable. | 20:03 |
pcardune | A lot of the time, our view class only has to have a few methods that help the template do extra hard python processing. | 20:03 |
pcardune | In this case, we should only have one method in our class, called getSortedContacts. | 20:03 |
lisppaste5 | pcardune pasted "browser.py" at http://paste.lisp.org/display/37668 | 20:04 |
pcardune | this example has some slightly more advanced python | 20:04 |
smalekgh | ooh, it almost looks like a ternary operator declared as a function... uh... inline... uh, yeah... | 20:05 |
pcardune | The sorted function is a standard python function that takes a list of items and returns another list with those items sorted. | 20:05 |
*** jelkner has quit IRC | 20:05 | |
wjohnsto | jelkner is skipping class | 20:05 |
pcardune | So if there were a list of numbers it would sort them from smallest to largest, and if there were a list of strings, it would sort them alphabetically. | 20:05 |
pcardune | But we have neither of these. Rather, we have a list of objects. | 20:06 |
*** jelkner has joined #schooltool | 20:06 | |
smalekgh | jelkner is not skipping class >_< | 20:06 |
pcardune | \Python doesn't know how to sort objects so we have to specify some function for comparing the objects - for telling python which object is greater that the other. | 20:06 |
smalekgh | so it's passing an object encompassing a function? | 20:07 |
AVN` | like Comparable in java | 20:07 |
pcardune | Since we are ordering the contacts based on last name, it makes perfect sense to compare the objects by actually comparing their lastName attributes. | 20:07 |
*** jelkner has quit IRC | 20:07 | |
smalekgh | everything is like a comparable, because the have the __cmp__ method | 20:07 |
smalekgh | I think | 20:07 |
pcardune | Rather than right a whole separate method just for comparing the objects, we will write a lambda function. | 20:07 |
wjohnsto | wait | 20:07 |
wjohnsto | there is no sort? | 20:07 |
wjohnsto | in the os? | 20:07 |
pcardune | wjohnsto: what do you mean in the os? | 20:07 |
smalekgh | you mean the standard api? | 20:08 |
wjohnsto | import os | 20:08 |
smalekgh | or not >_< *is shutting up* | 20:08 |
wjohnsto | at some point this year | 20:08 |
wjohnsto | I think I opened up a list of objects | 20:08 |
pcardune | os is an api for doing stuff with the operating system... sort doesn't have anything to do with the operating system | 20:08 |
wjohnsto | and sorted them | 20:09 |
pcardune | there is a sort method, all lists have the sort method | 20:09 |
*** jfroche__ has quit IRC | 20:09 | |
pcardune | but we have to customize our sort method | 20:09 |
pcardune | doing [3,42,4,5].sort() does a sort in place (it doesn't return a new list) | 20:10 |
pcardune | but doing sorted([3,42,4,5]) does return a new list | 20:10 |
pcardune | so back to the lambda function | 20:10 |
wjohnsto | ok | 20:10 |
pcardune | Rather than right a whole separate method just for comparing the objects, we will write a lambda function. | 20:10 |
pcardune | Lambdas are a great way to write one line functions. Expanded, the lambda we have here would look like: | 20:10 |
pcardune | def someFunc(a, b): | 20:10 |
pcardune | return cmp(a.lastName, b.lastName) | 20:10 |
pcardune | The syntax for lambda functions is simply lambda then the parameters the function takes, and after the colon is what the function returns. So this just returns a comparison of the lastName attribute as we desired. | 20:12 |
pcardune | hopefully everyone understands how lambda functions work now | 20:13 |
Preetam | they are pretty neat | 20:13 |
smalekgh | except you can't name them, can you? | 20:13 |
smalekgh | (it would make some functions really uber short) | 20:13 |
pcardune | right, you can't name them | 20:14 |
pcardune | With the browser view class written, we need to make our page template utilize the view class. Instead of repeating over context/values, we will repeat over view/getSortedContacts. | 20:14 |
pcardune | so i just changed one line in the page template: <div tal:repeat="contact view/getSortedContacts"> | 20:15 |
pcardune | now your tests should pass | 20:15 |
pcardune | also be sure to check it out in a web browser | 20:15 |
pcardune | next up is adding functionality for deleting contacts | 20:17 |
pcardune | But first, let's write functional tests for this functionality. | 20:20 |
pcardune | I think a good way to add delete functionality to our user interface is using checkboxes - the way zope does it already in the default container view. | 20:20 |
pcardune | There should be one checkbox for each contact, and a delete button at the bottom that will delete all the checked contacts. | 20:20 |
smalekgh | I got to go, have to eat lunch, I'll read the logs... Cya! | 20:21 |
*** smalekgh has left #schooltool | 20:21 | |
lisppaste5 | pcardune annotated #37668 with "browser.txt (delete functionality)" at http://paste.lisp.org/display/37668#1 | 20:21 |
pcardune | This time we will explicitly tell the browser which checkbox to check by specifying the name of the checkbox input element. | 20:22 |
pcardune | To solve this problem we have to think about it a bit more carefully. Specifically, how are we going to pass on which contact we want to delete to the browser view class. | 20:23 |
AVN` | my functional tests are failing already, I think the ...something... thing is not working | 20:23 |
pcardune | AVN`: that seems to happen a lot, but they actually do work, look further down in the diff for the real problem | 20:23 |
*** jinty has joined #schooltool | 20:24 | |
pcardune | there is an art to reading functional test failures and you can only learn it with experience | 20:24 |
pcardune | Remembering what the browser view class takes as parameters, it's clear that the request object is a good place to store this information. | 20:24 |
pcardune | and we can store things in the request using forms in html | 20:24 |
pcardune | so let's edit the contactcontainer.pt file and encapsulate the repeat in a form element | 20:25 |
pcardune | for the action of the form we want to use a tal:attribute | 20:26 |
pcardune | it would look like this: tal:attributes="action request/URL" | 20:26 |
pcardune | the request object has a variable, URL which is just the URL for the page you are looking at | 20:27 |
pcardune | (kind of like @@absolute_url except that it will give you the page too, as in @@index.html) | 20:27 |
pcardune | then you should add a check box before the link inside the repeat: | 20:27 |
pcardune | <input type="checkbox" tal:attributes="name string:${contact/__name__}.delete" /> | 20:28 |
pcardune | again, the name attribute for the checkbox is going to be based on the name of the contact object | 20:28 |
pcardune | we know that these names will be unique because all objects in a container have unique names | 20:28 |
pcardune | and we access the name of an object through the __name__ attribute | 20:28 |
pcardune | Then we can append ".delete" to that name so we know the checkbox is for deleting and now something else | 20:29 |
pcardune | finally we should put the delete button at the bottom of the form: <input type="submit" value="Delete" name="DELETE_SUBMIT"/> | 20:30 |
AVN` | is that in the tal repeat? | 20:31 |
pcardune | no | 20:31 |
pcardune | that should be outside the tal repeat because we only want one delete button for all the contacts | 20:31 |
pcardune | so with that we should get a nice looking form | 20:33 |
pcardune | you should check it out in a web browser | 20:33 |
AVN` | is this bad? UserWarning: You did not specify an i18n translation domain for the 'title' field in /home/cbeacham/lib/python/zcontact/configure.zcml | 20:35 |
pcardune | AVN`: no, we will fix that when we get to internationalization | 20:35 |
pcardune | Now upon clicking the Delete button, our browser view should be sent the selected checkboxes through the request object. | 20:37 |
pcardune | we need to do something with these checkboxes though | 20:37 |
pcardune | we need to implement deletion of the objects in the browser view. | 20:37 |
pcardune | Since we want this to happen right when the page is loaded, we will put the functionality in the __init__ method. | 20:37 |
pcardune | so create an __init__ method in the ContactContainerView class | 20:38 |
lisppaste5 | wjohnsto pasted "Error" at http://paste.lisp.org/display/37673 | 20:38 |
pcardune | and make sure that it takes context and request as parameters | 20:38 |
lisppaste5 | pcardune annotated #37668 with "browser.py" at http://paste.lisp.org/display/37668#2 | 20:42 |
lisppaste5 | wjohnsto annotated #37673 with "browser.txt" at http://paste.lisp.org/display/37673#1 | 20:43 |
pcardune | so rerun the tests and they should pass | 20:46 |
AVN` | darn | 20:48 |
pcardune | with that finished we are done with the user stories we have | 20:51 |
pcardune | but there will be more user stories next week | 20:51 |
pcardune | I would also like to introduce you to bzr | 20:51 |
pcardune | Kevin Cole made a good bzr tutorial here http://dc.ubuntu-us.org/resources/tutorials/bzr-intro.php | 20:52 |
pcardune | you should read over it | 20:52 |
pcardune | bzr is a revision control system that allows you to manage changes in a project | 20:53 |
pcardune | We will be using it extensively over the summer | 20:53 |
pcardune | I want you to make your zcontact application into a bzr repository | 20:53 |
pcardune | also try adding some little bit of cool functionality to the existing application | 20:55 |
pcardune | next week we will have a small show and tell of what people did | 20:55 |
pcardune | since i've given you some homework for the next week, we can end class 4 minutes early | 20:56 |
Preetam | lol | 20:56 |
pcardune | do give you 4 extra minutes to work on your homework :) | 20:56 |
pcardune | s/do/to | 20:56 |
pcardune | class dismissed | 20:57 |
Preetam | alright, thanks! | 20:57 |
*** Preetam has quit IRC | 20:58 | |
*** AVN` has quit IRC | 20:58 | |
CPCarey11 | I have a piano festival next saturday | 20:58 |
CPCarey11 | I can't make it to class | 20:58 |
pcardune | ok | 20:58 |
*** bnguyen has left #schooltool | 20:58 | |
*** Mounika has quit IRC | 21:01 | |
*** pcardune has quit IRC | 21:01 | |
*** mlinnell has quit IRC | 21:01 | |
*** Makorihi has quit IRC | 21:02 | |
*** kjcole has left #schooltool | 21:04 | |
*** CPCarey11 has quit IRC | 21:07 | |
*** tehminkeh has left #schooltool | 21:08 | |
*** nitromaster has left #schooltool | 21:08 | |
*** jinty has quit IRC | 22:49 | |
*** ignas has joined #schooltool | 23:04 | |
*** ignas has quit IRC | 23:09 | |
*** ignas has joined #schooltool | 23:21 | |
*** ignas has quit IRC | 23:28 |
Generated by irclog2html.py 2.15.1 by Marius Gedminas - find it at mg.pov.lt!