![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Class discussionThis is the place where you ask questions and other students and staff reply. Always post a question at the top of the page. Follow the pattern:Q: Your Name, Date - Q: Sagar Shah, July 31, 2007 - Will the last couple of lectures on frameworks and the adaptive object model be covered on the final? A: Nicholas Chen, July 31, 2007 - No. You will not be asked to implement a framework or the adaptive object model. Q: Elkin Florez - July 11, 2007 I have a question. Professor Johnson explains in class how to change a case statement spread in several clases. I did really didn't get the point. Can you explain it to me a little further. Lets say I have a code with: switch( option ) { case 1: {a = '$';} case 2: {b = "";} case 3: {c = "%";} } How can I convert this with to something that does not have if's. Thanks. A: Nicholas Chen July 11, 2007 - Elkin, if you can point me to the specific lecture and lecture slide, I can give a more specific answer. Here is a general answer why you want to avoid switch statements. Using your example above, let's say that I need to add a new case. What would I have to do? I would have to modify the class that contains that switch statement and add a new case. This is not always feasible. For instance, what if I do not have the source for the class? The better solution would be to use polymorphism. Each special case should be made into a class. Then, each class will conform to some interface. Each of these classes knows how to handle their own special case. And if you need to add a new class, you do not need to modify any switch/if statements. Take a look at Replace Type code with subclasses. For a more detailed explanation, you would have to refer to "Refactoring: Improving the Design of Existing Code" or "Refactoring to Patterns" That being said, switch statements are not always evil. For instance, if you are using them to choose between different action based on some very specific and stable API (maybe some communication protocol) then they are fine. You should avoid using switch statements if you are switching based on the TYPE of an object since polymorphism is a better solution. Jeffrey Votteler - June 23rd, 2007 - Is anyone elses Quiz 3 email empty? Elkin Florez - June 13, 2007 - After the Lecture 8, I got some questions reagrding the implementation of ValueWithHistory. My question is why is it better in this case to create a SortedSequence inherited from SortedCollection instead of using SortedCollection in composition ?. The other question is if I create a small object containg date and value, with only accessors and comaprators and insert this object in the the SortedSequence, will this simplify the task of synchonizing the 2 collections defined in ValueWithHistory class ? A:Nicholas Chen - June 14, 2007 - 1) If you look at the comment in SortedSequence, it says: "I add one method to SortedCollection. It would be just as easy to add the method directly to the class instead of making a subclass, but this makes it easier to see the new method.". So, SortedSequence is exactly like a SortedCollection except for its one method. If you use composition, then you would have to delegate a lot of the messages of SortedSequence to the composition object. Since SortedSequence is supposed to be able to handle every message that a SortedCollection is able to this is a good place for inheritance (or just addding the method directly to SortedCollection since you can modify it in Smalltalk). 2) With your small object, it might simplify synchronizing the 2 collections. Why don't you try it and let us know? It depends on how much functionality you need. If you only need simple behavior, then it might be fine to leave things as they are. If you suddenly need more functionality then it might be better to refactor the code to split the job into smaller objects. Or if you feel that the code can be easier to understand if we had that small object then it would be a good reason to refactor the code to make it more understandable. Johnny Mohseni - June 13, 2007 - To somewhat piggyback on Elkin's comments I find that Smalltalk is quite interesting and forces one to really embrace OO whereas other languages (I am a Java guy) can let you get away with such things. However, the aspect of Smalltalk that intrigues me is the massive flexibility it has, which is good and bad. For example, Abstract Classes are at the core of OO Design but in Smalltalk nothing really enforces (since you can actually instantiate it) it other than the developer knowing what to do and putting comments in. The fact it is not strongly Typed leads to great risk unless to a lesser degree you're a seasoned Smalltalker. In the interface arena where no interfaces exist just the fact that if an object has a method X means it can handle it and if it doesn't that you'll get a runtime error. So with all this flexibility comes a price especially if you're a novice. I am just curious why Smalltalk , the language, didn't take into account more constructs to possibly limit structural blunders and to also give more hints (e.g. you have to read comments/code to know if something is abstract or until you discover that the method has a 'subclassResponsibility' as a return). A: Nicholas Chen - June 14, 2007 - Take a look at Strong Typing vs. Strong Testing. Q: Johnny Mohseni - June 17, 2007 - I definitely understand the "test infected" paradigm and the benefits of good, relevant unit testing. But I have two issues that I still don't think are answered well by Eckels: (1) If Eckels and Robert Martin just consider compilation a form of unit testing (syntactic) (which I agree with) then why not use it to your advantage in addition to the other unit testing that you should be doing to verify behavior. With compilation backing your structure you can spend more time concentrating on writing unit tests for complicated algorithms and business rules. The only argument that Eckels truly had was that Python/Ruby are more productive than C++/Java due to less rules of the language etc., which gave you more time to write the unit tests to check for correct polymorhpic behavior and structure. (2) Leaving the validation of polymorphic behavior up to good unit test writing is troublesome onto its own. We all know the difficulty of writing and maintaining solid unit tests let alone the impossibility of complete testing so why not have the language do some repeated and needed leg work for us out of the box. To rely on the developer to write unit tests to validate the structural integrity of the objects/methods is needless if the compiler/interpretor can do it. Again I am not a programming language designer so I don't know how that affects loose languages like Ruby/Smalltalk/Python by putting some Type checking or a bit more structure in but I would like to know if such articles exist? A: Nicholas Chen - June 17, 2007 - AFAIK, there is no attempts at making typed versions of Ruby or Python. There was a rather successful rendition of typed Smalltalk called Strongtalk. Strongtalk was unique because it allows optional static typing so that normal Smalltalk code could be run without modification. Strongtalk was acquired by Sun and its technologies were incorporated into the Java virtual machine. Last year, Strongtalk has been released as an open source project so you can now get your hands on it and hack it. You might want to ask (or search) on the comp.lang.smalltalk for answers to your previous questions. Elkin Florez - June 9, 2007 - I really like SmallTalk language and the simplicity of its syntax, concepts and flexibility. May be what I know about the language is very limited so far, but Looking at the lecture 6, I didn't get a good taste of SmallTalk Libraries. I can see that complexity of the libraries is high, and consistency and design is not quite clear. IMHO, As I can see it, the language libraries are not reliable and then not very efficient from the point of view of the programmer since he/she has to go and read the code implementation to understand how the library implements something, then thing if that is what he/she needs and then figure it out how to used it. May be I am used to work with the libraries in Java which looks to me very consistent and In 10 years of being using it, I have needed just once to go and see how something is implemented. I am not saying that Java libraries are perfect. Everything can be improved always. If SmallTalk is using very old libs implementations, and we think that they can be better, why not to rewrite a better one? I understand that many people have been using it, but creating a new version of the library may enable users to choose between libraries and still support old code, while the new one can use the new set of libraries. Is some one doing that task? Is it feasible to redesign the whole thing and make it more consistent, simpler, and easy to use? I think it is the only way for the language to grow. A:Nicholas Chen - June 9, 2007 - You are right. Some of the libraries are pretty outdated mostly because they are not considered part of the core of Smalltalk. For instance, the Collections library is not as consistent as it should be. This could just be for Squeak. There is another version of Smalltalk VisualWorks which could have more consistent libraries. The again, the programming practice of Smalltalk is to actually go and read the code, try things, change things, fix things. This is counterintuitive to most people who have used other languages where such modifications are unnecessary and also impossible. However, I agree that when you are dealing with critical projects, you would rather have everything working than to dive into the code to find out what is wrong. Squeak is an open source project and with all open source projects, someone actually has to provide the impetus to change something. At the moment, that impetus is either missing or anemic. People are focusing their efforts on different aspects. Maurice Rabb is actually working on rewriting the collections library to be more consistent. I'll try to get him to write something or post his current work up. In the mean time, you might want to read the Smalltalk Best Practice Patterns book which has a good introduction to the collections library. Nicholas Chen - June 9, 3007 - Do people prefer the quiz to be assigned on a different day (maybe Saturday or Sunday)? If so, please vote for a day below. Just increment the count for each day (or suggest a new one). Friday: 1 Saturday: 6 Sunday: 2 For people who did not vote, I will assume that they are fine with any of those days. Future quizzes will be on Saturdays then. Ovidiu Tudosa - Jun 7, 2007 - For anyone interested to read about Smalltalk method primitives, there is documentation in Object class >> whatIsAPrimitive and Object class >> howToModifyPrimitives. If you want to write your own primitives, you can have a look here (thanks Nicholas!). Q:Johnny Mohseni - Jun 7, 2007 - Nicholas what exactly can we expect on the quiz? Can you provide us with how/what we should prepare with? A:Nicholas Chen - June 7, 2007 - It's going to be based on the homework and readings. Since there is no reading yet, it will be based on the homework. Q:Jeffrey Dahl - Jun 3, 2007 - Anybody still need a partner that does lives in the western hemisphere? I'm on MDT. A:James Fu - Jun 7, 2007 - I will be your partner. I am from IL. Q:Elkin Florez - June 3, 2007 - Thank you Nicholas for the links and your clarification. I will take a look to the referenced pages. Working on MP2 I found that the method new is not a method of Object neither of ProtoObject. Where is it defined ? I know it is not a lang. keyword... right ? :-) A:Nicholas Chen - June 3, 2007 - As the question says, it is not that simple to find out where it is. I suggest taking a look at this article. It should be helpful. This is actually related to your previous question about class methods and instance methods. And nope, it is not a keyword. Smalltalk has very few keywords. See the list here. Q:Christopher Patti - June 3, 2007 - I'm also looking for a partner to work on the homework assignments. However, I live in Shanghai, so I'm 12 hours ahead of EST. Anybody not in the western hemisphere???? Q:Sagar Shah - June 2, 2007 - I am looking for a partner for the homeworks - I live near Chicago, IL (Central Time Zone), and have finished MP1 if anyone wants to partner up and check answers. My schedule for working on the homeworks is pretty flexible as I am starting work in mid-August. A:Richard Young - June 2, 2007 - I'll be your partner, I live in Chicago too. Q: Omer Khan-June 2, 2007 - Will this be class graded on the curve or will some absolute scale be used. A: Ralph Johnson - It is on an absolute scale. I have been teaching the course for a long time and have a consistent standard. Since so much of the grade is due to the project, it is subjective, but the same person (me) judges them all so it is fairly consistent. Most people get A's, and I think that people who work hard on the project always get an A. Q: Shilpi Balan-June 1, 2007 - I am looking for partner for assignments. Please let me know if anyone is interested. A: Joe Prasanna Kumar - June 2, 2007 - I am interested in partnering up with you Q: Elkin Florez - June 1, 2007 - looking at class #2 I got 2 questions. 1. Can I say that Class methods are similar to what we have in Java as "static" methods and can I say that the Symbols are similar to the "static final" variables in Java ?. A: Nicholas Chen - June 1, 2007 - Yes you can think of class methods as being similar to static methods in Java. However, the underlying implementation is quite different. I am not sure if we are going to discuss it this semester but it basically has to do with the MetaObject Protocol nature of Smalltalk. Extra information for those who are interested: You can take a look at this. Basically every object has a corresponding meta-object where all the class methods are stored. Languages like Java and C++ do not have this duality as far as I know. Are symbols similar to "static final"? That is the first time I have heard of that analogy, but I agree that you can think of them that way. There is always only one instance of a symbol that is being shared. Ruby (pretty similar to Smalltalk) has symbols too and here is a lengthy discussion of what they are. If anyone wants more information on these two topics, let me know and I can probably write something up (or ask Prof. Johnson to). 2. What do I need to do in order to disribute an application made in SmallTalk. Does Squeak create an executable file? or is it something like Java in which you have to install the VM to execute the compiled code ? A: Nicholas Chen - June 1, 2007 -There are a couple of methods for this. See this first to see why there is no executable. And then this to see what you can do instead. Q: Jeffrey Votteler - May 31, 2007 - Anyone want to partner up for the homeworks. I've already handed in MP1. I'm on the east coast and will try to do most of my HWs either during lunch at work or in the evening at home mostly after 830pm EST. Contact me at email address. A: Elkin Florez - June 1, 2007 - Hey Jeffrey I would be glad to partner you up. Q: Jeffrey Dahl - May 31, 2007 - https://agora.cs.uiuc.edu/display/I2CS/CS598rej states: Lectures can be viewed in FLV (Flash video) format by clicking on the Apreso Link. You can also download an MP3 audio file of the lecture by selecting the link to the right of Audio URL.Where is "the link to the right of the Audio URL?" A: Nicholas Chen - May 31, 2007 - I'll talk to the technology group about it. You can temporarily get the audio from this page. Q: Elkin Florez - May 29, 2007 - You are asking us to create gorups for homeworks and projects, how are we supose to create those groups? A: Nicholas Chen - May 29, 2007 - You will create the groups for the projects later in the semester. The final project will commence once all the homework assignments are done. For the homework, you should create groups by yourself. You can either contact someone you want to work with by e-mail or create a new page on this wiki (and announce it to everyone) where people can sign up if they are interested. You should probably post a schedule when you plan to work on the homework so that people with similar schedules can work together. I don't think it is fair for me to do the assignments so I am going to leave it to you guys to work out a suitable schedule. The best way (as mentioned by Paul Adamczyk somewhere on this page) to work on the homework for online students is to do it on your own first. And then compare/discuss your answers with your partner before submitting. As always if there is something your or your group member does not understand, feel free to post to the swiki. Or look up Machine Problems Discussion to see if anyone has already answered that question. Q: Navodit Kaushik 14-February-2007- I am not fully clear about the relation / difference between polymorphism and double dispatch. Can someone explain this a bit with an example? Q: Navodit Kaushik 24-January-2007- I am looking for a partner for working on the MPs. If any one is interested then please email me at kaushik2 AT uiuc DOT edu. Q: Navodit Kaushik 24-January-2007 -I have a doubt regarding cascading and order of execution of messages. When I execute the message- "3 + 1 raisedTo: 3" I get the result "64" but when I do - "3 + 1 raisedTo: 3; raisedTo: 2" it gives 16. I would have expected it to give 64^2. Can someone please explain this? A: David Killian 24-January-2007- Using semicolon causes each message to be sent to the original object, not the returned result of the previous statement. So in your example, both raisedTo:3 and raisedTo:2 are sent to the object 4, and only the last result is returned. What you were expecting was (3+1 raisedTo: 3) raisedTo: 2, where in this case the second raisedTo message is sent to the result of the first statement (64), rather than having both being sent to the same object (4). A: Maurice Rabb 24-January-2007 I have added an extended explanation of cascades. Q: Lina Forero 4-August-2006- When will the schedule for project meetings with Prof. Jhonson be available ? A: Paul Adamczyk 5-August-2006- If you have a specific time request, please send it to me. I'll post available times as soon as I get a confirmation from prof. Johnson (which may be as late as Monday morning). Q: Lina Forero 3-August-2006- Spring 06 final. Problem 20. I am not sure of how to use reflection to solve this problem. Perhaps using doesNotUnderstand to handle the definition of the dates with this format ? But if we do that, we have to create a new class with a nil superclass that defines the binary operation ?? I already watched the lectures on reflection (twice) and even searched for more on the subject but still I can't figure it out how to solve this. Thanks A: Paul Adamczyk - 3-August-2006- The best way to understand this problem is to do it in the image. Try inspecting "3 June, 2006" and you'll see that a message doesNotUnderstand: defined in the Object class is called, because SmallInteger class does not have a method June. You can override this method to accept all months (and call the base class for all other error cases). Note that this will only take care of the "3 June" part of the string. You still need to implement the "," method. This method should be defined for the object that you return from the doesNotUnderstand: method. A: Lina Forero - 3-August-2006- Thanks Paul. I finally get it. Now my image has a method in SmallInteger doesNotUnderstand: aMessage |months m| months:= #(#January , #February, #March ,#April, #May, #June, #July , #August, #September, #October, #November, #December). months do: [ :each | each = aMessage selector asString ifTrue: [m:= each. ^FunnyFormatDate day: self month:m. ]]. ^ super doesNotUnderstand: aMessage And I created also a FunnyFormatDate class with the implementation of the method , , aYear year:= aYear. ^ self! ! Now , when I write 3 June, 2006 I get an instance of FunnyFormatDate. Q: Lina Forero 3-August-2006- Spring 99 final. Anyone with different answers ? 1. Builder 2. Adapter 3. Composite 4. Template Method 5. Facade 6,7 Bridge, Command 8. Decorator 9. Observer 10. ?? 11. Singleton 12. Visitor 13. Command 14.Abstract Factory 15. Adapter 16. Composite 17. Template Method A: Nevedita Mallick - 3 August 2006 - 1: I had Abstract Factory because the question asks for allowing the client programs a lot of control over the parts that make up the complex objects. not sure! 6, 7: Mediator, Strategy 10: Facade 15: Iterator A: Josh Lintz - 4 August 2006 - I'll take a hybrid of your two answers for 6,7: 6, 7: Bridge, Strategy 13: memento Q: Des Iorgova 2-August-206 - Spring 2005 final, Prob 12 h) I am confused of what h) asks us to do. We are asked to define a checkoutBy: method for a Book, which is only called if the book is NOT checked out. Its arguement is the client checking out the book (?). It creates a new CheckoutEvent for the book. - How can we create a CheckoutEvent when the book is not checked out and how can we have a client checking out the book when the book is NOT being checked out? Where is my confusion? Since we are not going to have Quizes, and the quizes were slated as 10% of the grade, will this 10% be added to the weight of the MPs or the Final, or the Project? A: Paul Adamczyk - 3-August-2006- A precondition for calling the method checkoutBy: aClient is that the book is not checked out, i.e. you don't need to check the state of the book inside this method, you can assume that it's not checked out. The postcondition (i.e. after the method has been called) is that the book is checked out to aClient and the book's state is 'checked out.' As for the grade, all other percentages stay the same, we'll just assigne the grade using 90% as the maximum score. Q: Lina Forero - 2-August-2006- From the Spring 06 exam: The purpose of many of the design patterns is to make it easy to change some property of the system. What design pattern would you use to make it easy to change: 9. The way a set of objects interact with each other. Mediator 10. The algorithm that an object uses. Strategy 11. The number of objects that need to be notified when an object changes state. Observer 12. The implementation of an abstraction. Bridge 13. The interface of an object. Adapter 14. Whether or not an object has a property. Decorator 15. Whether a component is a single object or a group of similar objects. Composite. 16. The class of a component. Factory Method. 17. The individual step of a complex algorithm. Template Method. 18. The way an object represents its state even though other objects can remember its state and make it revert to a previous state. State ?? Because Memento is not precisely to let the state change easily. 19. The number of algorithms in a system that operate over a complex object structure, where the algorithms have to treat different classes of objects differently. Visitor A: Nevedita Mallick - 2 August 2006 - I agree with your answers, but I had Memento for 18. because I thought in Memento pattern, the Originator object reperesents the state and the Memento object stores the originators previous state. So, this pattern allows the Originator to change its state easily. Q: Lina Forero - 2-August-2006- More on the Spring 05 exam: 9. Show how to implement the Singleton pattern in Smalltalk. Object subclass: #Singleton instanceVariableNames: ' ' classVariableNames: 'SoleInstance ' poolDictionaries: '' category:exam-preparation Singleton class methodsFor: 'instance creation' instance SoleInstance = nil ifTrue: [SoleInstance := super new]. ^SoleInstance! ! Singleton class methodsFor: 'instance creation' new self error: 'Cannot create new object'! ! 10. The Refactoring Browser (R.B.) uses the Command pattern for every user command that changes the program. In other words, selecting a method is not a command, but changing it or changing its name is a command. The, the R.B. can implement undo. List three things that are probably true of the design of the R.B. just based on the fact that it uses the Command pattern.
A: Josh Lintz - 2-August-2006 - perhaps Observer Pattern to watch for user's command choices. A: Des Iorgova - 2 August 2006 - I was basing my answer strictly on the fact that it uses Command pattern. My three assumptions are 1) there must be an Abstract Command class which defines Execute() and Unexecute() methods 2) There must be a history list that can be traversed to support Unexecute()/Undo() 3)Concrete commands ivoke methods in the Application. Would those be acceptable answers? A: Nevedita Mallick - 2 August 2006 9: For Sindleton pattern, I had, Singleton class methodsFor: 'instance creation' Object subclass: #Singleton instanceVariableNames: ' ' classVariableNames: 'SoleInstance ' poolDictionaries: '' category:exam-preparation default SoleInstance ifNil: [SoleInstance := self basicNew]. ^SoleInstance Singleton class methodsFor: 'instance creation' new ^SoleInstance " an error message would probably be better" 10: RB might be using visitor pattern to browse the parse trees generated after compilation, for doing the changes. Q: Ryan Senior - 1-August-2006 - I was wondering how the test was going to be graded on the details of the smalltalk code. For example, while taking one of the practice exams, I needed to add 14 days to a date object. I just kind of guessed addDays: (because I forgot what the exact method was called). Turns out, that was the correct method, but in the test, I obviously won't have access to squeak to check. If I had guessed incorrectly and maybe wrote date addDaysToDate: 14, would that still be correct? A: Paul Adamczyk - 1-August-2006 - A nice trick to remember in a case like this is "assumption." You can write on the test, "I assume that class Date has a method addDays: anInteger." In general, you need to follow Smalltalk syntax and naming conventions (Kent Beck's book), but you are not required to memorize exotic method names. You should remember things like "select:" or "inject:into:" or when to use OrderedCollection rather than Array. A: Nevedita Mallick 1-August-2006 - I agree with your answers. Ryan Senior - 1-August-2006 - Looks like we were the same except for number 1. For 1 I had chain of responsibility. Paul Adamczyk - 1-August-2006 - Every time you see a reference to "tree structure" it's a good indicator that the answer is Composite. Q: Lina Forero 1-August-2006- In preparation for the exam, maybe someone is interested in sharing answers for the old final exams. From the Spring 2005 exam, here are my answers: 1) The file system has tree-structured directories. Which design pattern is indicated by the tree structured directories? Composite 2. You want to reuse the classes that access I/O devices from another project. However, those classes don't have the interface you want. One solution is to refactor them. Another solution is to reuse them without changing them. Which design pattern would help you reuse the classes for the I/O devices in your operating system? Adapter 3. Your file system has many classes in it, but you want to hide them from the application programmers and present a simpler interface to them. What design pattern lets you hide the complexity of a subsystem like a file system? Facade 4. Suppose your system should be able to implement many kinds of file systems. A Linux file system has Linux directories and Linux files, while a BSD file system and an NT file system have their own ways of representing directories and files. You want to be able to write reusable algorithms for the file system, but when these algorithms are creating directories and files, they will create them for Linux, BSD, or NT as appropriate. Which design pattern would help you create objects of the right class? Abstract Factory The purpose of many of the design patterns is to make it easy to change some property of the system. What design pattern would you use to make it easy to change: 5. The way a set of objects interact with each other. Mediator 6. The algorithm that an object uses. Strategy 7. The number of objects that need to be notified when an object changes state. Observer 8. The implementation of an abstraction. Bridge Q: Josh Lintz 25-July-2006 - There seems to be a server problem with Monticello. Whenever anyone in our group tries to click in the repository we get a Telnet error. Anyone else having this problem? Q: Amarnath Bachhu 26-July-2006 - I am seeing the following problem in saving to a repository (initial part of the stack): [] in FTPClient(ProtocolClient)>>checkResponse {[:response | (TelnetProtocolError protocolInstance: self) signal]} Arguments and temporary variables: response: '550 Requested action not permitted.' FTPClient(ProtocolClient)>>checkResponse:onError:onWarning: Receiver: a FTPClient Arguments and temporary variables: aResponse: '550 Requested action not permitted.' errorBlock: [] in FTPClient(ProtocolClient)>>checkResponse {[:response | (Telne...etc... warningBlock: [] in FTPClient(ProtocolClient)>>checkResponse {[:response | (Tel...etc... Receiver's instance variables: stream: < I tried manually logging into the FTP server and upload the package. It also fails with the same error. I guess there is a authentication problem. A: Paul Adamczyk 26-July-2006 - The CS department has moved all the machines behind a firewall. I'm trying to figure out how to make Monticello available again. UPDATE: Paul Adamczyk 26-July-2006 - The problem should be solved. If you're still experiencing problems accessing Monticello, please email me. Q: Ryan Senior 22-July-2006 - How will handing in the project work? Will we demo our projects? Or do we just hand it in? Either way, what day does it need to be handed in/demoed by? A: Paul Adamczyk 23-July-2006 - To hand it in, your code must be in Monticello. We can access it from there. There will be a final demo, which is just a meeting with prof. Johnson (Skype, phone, whatever you've been using so far) the last week of the semester. I'll check with him what is the last day for that meeting and I'll post it on the swiki. Q: Ryan Senior 19-July-2006 - When will we find out more information about the exam? What is covered, example questions etc. I tried to look at the "Old" exam on the wiki, and it looks like the link is broken. A: Paul Adamczyk 22-July-2006 - The link is up now. The exam will be quite similar. There will be design/coding problems that require use of design patterns. You should know how to implement all the design patterns from the book and how to apply them to specific design problems. The questions in the old exam are quite similar to what you should expect on the final. Q: Amarnath Bachhu, Ajay Sharma 4-July-2006 - We are looking for additional partner for our project group. Right now we are two of us. If you are still looking for a group, do email us. Q: Jesus Alvarez 3-July-2006 - Have the dates for the quizzes been defined? Thanks. A: Paul Adamczyk 4-July-2006 - There will be no quizzes this week. We haven't set up the schedule yet. Q: Lina Forero 29-June-2006 - I am having problems with Squeak, it is very slow, and everything starts to slow down also...so I finally have to restart my computer. I re-downloaded a fresh image and everything but it is not helping. (I am working in Windows 2000) Any ideas on why this is happening or how to solve it ? Thanks Paul Adamczyk 29-June-2006 - Removing old versions of Squeak and downloading a new environment is the only suggestion I can think of now. Students in prior semesters had interesting adventures with Squeak, but we haven't been able to figure out the exact causes of their problems. Is your problem at all related to downloading the refactoring browser? Q: Elaine Savino 21-June-2006 - I think it would be great to have the point distributions used for grading each part of the homework listed in the homework description itself. This way, there are no surprises. For example, MP7 would say Part 1 (5 points)... Part 2 (10 points), etc. Also, will sample solutions be posted? I always find this helpful. Finally, for MP3 and beyond, will we get actual comments on our code, or just grades? Obviously the former would be helpful for learning. Thanks! A: Paul Adamczyk 21-June-2006 - All homeworks carry the same point value (10) and the value for each part corresponds to the amount of work required to complete it. Since the homeworks are worth 10% of the grade altogether, I don't see any value in assigning more detailed point distributions. I will post solutions as I grade the homeworks. I am providing some feedback about the code while sending out grades. Q: Manas Dadarkar 12-June-2006 - When can we expect the grades for our homeworks? A: Paul Adamczyk 12-June-2006 - I'll finish grading MP1 and 2 tomorrow. Q: Elaine Savino 11-June-2006- When will we need to form groups and decide on our project? Is there a timeline (even draft) for the project milestones/due dates? A: Paul Adamczyk 12-June-2006 - Prof. Johnson recommends that you start forming groups by the end of homeworks, so that you can start working on the project as soon as the homeworks are finished. He's currently out of town, but he will be back on June 26, so that day is probably a good time to prepare some ideas and to discuss them with him. It's a programming project with little documentation (see Class projects for ideas and sample documentation). There are no deadlines other than the final project due date, which is the last day of the semester (August 5). It is recommended that you meet with prof. Johnson (via Netmeeting, Skype, etc) on weekly basis to keep him informed about your progress. Prof. Johnson likes to be involved with the projects, so talk to him often and early about it. Q: Tony Poku 11-June-2006 - My homework partner just dropped the class. Would be awesome if I could find a replacement compatible with the central time zone. I am in Chicago. A. Josh Lintz 12-June-2006 - I am interested in a homework partner if you are still available. I am in New York. Q: Elaine Saivno 10-June-2006 - I was using the Squeak debugger and my process got stopped in the ProcessorScheduler, terminateActive method. How can I break out of this? If I need to kill Squeak, how can I use the changes log to recreate my image from today... will I lose all the work I did today if I didn't save the image yet? A: Paul Adamczyk 10-June-2006 - Good instructions for recovering your changes are provided at the bottom of this tutorial: http://web.cecs.pdx.edu/~black/CS420/Tutorial/Squeak%20Worksheet%201A.html Q: Jesus Alvarez 9-June-2006 - It may be better to consider the CS598REJ newsgroup (news://news.cs.uiuc.edu/class.cs598rej) for threaded discussions. Wikis are good for working on documents or projects but are not optimal for message exchanges. Using a Wiki for discussing a hot topic results in a very long page. Also, seeing all messages everytime we visit this page is not too efficient. A: Paul Adamczyk 10-June-2006 - The only problem with this suggestion is that it adds yet another place to check. As long as all the new topics are added to the top of the page, reading it should not be a problem. Q: Elaine Savino 9-June-2006 - In reference to Manas' post belolw... I am feeling the same in regard to having assignements due 3 times a week. I think it would be helpful to combine some of the MPs and make them due twice a week instead of 3 times a week. I think having things due on Monday and then Thursday would be good, so that the I2CS students would have the weekend and then most of the week to work on the assignments. Thoughts on if we could do this? A: Paul Adamczyk 9-June-2006 - This sounds like a good suggestion. Let's have homeworks due on Mondays and Fridays then. That way you'll have the weekend to work on them. Also, if you feel that you need more time to finish HW 3, you can turn it in by Sunday night. A: Jesus Alvarez 9-June-2006 - I also like Elaine's suggestion of grouping homeworks into two per week instead of the current three. For people with day jobs, it's easier to devote more time on weekends than evenings during the week. Q: Ryan Senior 8-June-2006 I was wondering if there is a way to stop the SUnit test running from running after I have clicked on "Run One". I have written some apparently bad code (infinite loop or something similar) and I have click on the Run test button and then Squeak is locked up. I wasn't sure if there was some equivalent to ctrl-c or something like that which would stop the SUnit test from running. If not, is there some way to set up automatic saves of the image? I've been forgetting to save frequently, and then I run some bad code and there goes an hour of work... -Ryan
A: Paul Adamczyk 9-June-2006 - "Alt-." seems to work most of the time, but sometimes it takes longer to break than at other times. As for automatic saves, Squeak generates a .changes file (stored in the same location as the image file), where all your code updates are stored each time you do a save. There are ways to automatically recover that code, but they don't always work. But you can just copy the most recent versions of your code from the .changes file and paste them into the image. Q: Manas Dadarkar 8-Jun-2006 - Hi All, First of all, please excuse my limited knowledge because this is my second semester in UIUC and the first time I am attending a college in the US. I have noticed that the lectures for the summer semester are longer than the spring semester but I assume that's because of the shorter duration of this semester. However, the intent of this discussion is to get your opinion because I am getting a bit overwhelmed with the string of homeworks that we have to submit every 2 days. Smalltalk is not an easy language or atleast takes some time getting used to (for me). I very much like the subject matter of this course but lately I am finding myself studying only what is required to submit the homework. I am concerned about this because this is not why I joined this course. I wanted to spend some quality time reading different books on Smalltalk, understanding the nuances, playing with the language system in addition to listening to the lectures. But I also have a full time job and it is getting extremely tough for me to balance my job and accomplish my above objectives in addition to getting the homeworks out on time. I was curious if some of you also feel the same way. If not, can anyone give me tips on what I need to do better. I am not afraid of hard work. Infact, I can even go as far as to say that I am addicted to it. However, my goal of working hard is to have a thorough and excellent understanding of the subject matter. I consider getting good grades a (welcome) side effect to this. But I am struggling here and I need help. Again, any comments, suggestions, good reads are welcome. Thanks, -Manas Paul Adamczyk 8-Jun-2006 - I think that concerns brought up by Manas are shared by other students as well, so let me explain how the course is structured so that you can decide whether to continue or not. There are 3 lectures per week. These are the same lectures that are used during the regular semester, but we have three per week instead of two, because the summer semester is shorter. We have 10 homeworks, which are intended to get you familiar with Smalltalk. Starting with HW 6, they will be assigned every other class period. Not all homeworks are as time-consuming as HW 1 and 2. It is beneficial to find a partner to work on the homeworks. (If you'd like to find a partner, post a message on this page.) There are tools for on-line collaboration if you wish to work in real-time, but you can also send code back and forth by filing it out. And, of course, you should post questions about homeworks on the wiki. After we finish all the homeworks, you should know Smalltalk well enough to do the project. The later lectures cover OO design and patterns. We will have a few quizzes on these lectures, but no more homework. As for books, there aren't any good books on Smalltalk language that will teach you more than playing with the code. That's why we have so many homeworks. The two books required for this course are about design (which is the main topic of the course) and less about Smalltalk. In my opinion, you will gain most from this course by doing the project. Everything else is set up to lead you to that point. Only after you've completed the project can you fully appreciate the beauty of Smalltalk and of true object-oriented design. Feel free to join in this discussion whether or not you find the pace of the class too fast.
Paul Adamczyk June-09-2006 - I would not recommend splitting up the work. The assignments are great for pair programming, but even on-campus students don't like that option much. Ryan's approach is probably the best - work separately, discuss questions that seem ambiguous, and come to a consensus within your group. If you can't post your questions on the wiki. Q: Josh Lintz 6-Jun-2006 - The Grading Polocy says that 10% of the grade is from quizzes. I assume that since this course is all online that the quizzes have have been incorporated into the homeworks and that the homeworks are now 20% of the grade. Is this correct? A: Paul Adamczyk 6-Jun-2006 - Actually, I'm planning to have real quizzes. You'd get them as email attachments and send them back the same way. The quizzes, just like homeworks, are there to help you study. So, to take a quiz, you'd be your own proctor and make sure that you don't cheat. Cheaters will be punished by the final exam :) Q: Lina Forero 6-Jun-2006 - I am unable to access the lectures. It says 'Service Unavailable'. Anyone having the same problem ? A: Nevedita Mallick 6-Jun-2006 - Yes, I too am getting the same message. A: Nevedita Mallick 6-Jun-2006 - The site seems to be up now. Q: Amarnath Bachhu 3-Jun-2006 - I am looking for a partner in solving MPs. I am from Bangalore, India. If you are in a compatible timezone and are interested please email me at bachhu AT uiuc DOT edu. Links to this Page
|