From tsgoldsun1 at gmail.com Sun Jan 1 15:15:08 2006 From: tsgoldsun1 at gmail.com (Taylor Solomon) Date: Sun, 1 Jan 2006 15:15:08 -0500 Subject: [Verba] Compatibility with livewires Message-ID: People of the verba project, I hope you had a nice break from school. I have read the intro to the livewires tutorial and the "running" pdf. I have noticed that they refer to: >>>from livewires import * This command returns false, since it can't find the file to import. Also, they are using an editor called "IDLE". If anyone has an idea as to what the tutorial is referring to, please post. Also, it would be helpful if everyone on the post could post an email containing the following information: - their operating system - their python editor - and if they have started to read the livewires tutorial. That would be very helpful for our getting underway learning python. Thank you. Taylor Solomon tsgoldsun1 at gmail.com From tsgoldsun1 at gmail.com Sun Jan 1 15:47:32 2006 From: tsgoldsun1 at gmail.com (Taylor Solomon) Date: Sun, 1 Jan 2006 15:47:32 -0500 Subject: [Verba] Alright I figured it out Message-ID: Regarding an earlier email about some confusing parts of the livewires tutorial, I have succesfully configured my computer to do what they ask. >>>from livewires import * - This means that they made some functions to make learning python easier, and when you type this into your editor, it makes the editor look for a folder called livewires and inside it it looks for a specific file (hence the *, which refers to some file). But the confusing part was that the livewires folder is online, and you have to download it. It i in a tar.gz compression format, which should be handled by winzip I think. The download is called "the livewires package" (not the pdf's. i.e. the tutorial itself) This folder contains a folder called livewires. Just copy the folder, go to the folder where your python editor is, and If you are on a mac, look for a folder called site-packages. this folder is where you put the livewires folder, because it is the folder where the editor looks when you type "import" in the editor If you are on windows, The livewires folder probably just goes in the same folder as the editor itself, unless you see a folder called site- packages. You should be set with their stuff now. Just go into your editor and type >>>from livewires import * If it returns ">>>" on a new line, congrats. It found the file If it doesn't, then the livewires folder is not in the correct folder. Just try around until you find the right place for it. If this is confusing, just email me, Taylor, at tsgoldsun1 at gmail.com and i will walk you through it. THANKS Taylor Solomon tsgoldsun1 at gmail.com From stuart at gathman.org Sun Jan 1 17:30:05 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Sun, 1 Jan 2006 17:30:05 -0500 (EST) Subject: [Verba] Alright I figured it out In-Reply-To: Message-ID: On Sun, 1 Jan 2006, Taylor Solomon wrote: > If you are on a mac, look for a folder called site-packages. this > folder is where you put the livewires folder, because it is the > folder where the editor looks when you type "import" in the editor It also looks in the "current directory", and on any other directories you put in the PYTHONPATH environment variable. (Does everyone know what an environment variable is?) > If you are on windows, The livewires folder probably just goes in the > same folder as the editor itself, unless you see a folder called site- > packages. Either will work - see above. > If this is confusing, just email me, Taylor, at tsgoldsun1 at gmail.com > and i will walk you through it. Thank you. -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Sun Jan 1 18:09:46 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Sun, 1 Jan 2006 18:09:46 -0500 (EST) Subject: [Verba] Environment variables and Club projects In-Reply-To: Message-ID: On Sun, 1 Jan 2006, Taylor Solomon wrote: > regarding if everyone knows environment variables, I think that it > should be explained. An environment variable is a way for the user to > define certain folders on the system as places where the program can > find stuff. That's my impression of what it is. I don't know if it is > the right one. Is it? An environment variable is a name with a text value. On Unix (and OSX) and Windows, environment variables are inherited by child processes. When a child process changes an environment variable, it doesn't change the parent. On Unix (and OSX), you can list the environment variables of the current shell with the "env" command. On Windows, it used to be "set", but I haven't kept up. If the above didn't enlighten you, don't worry about it. The only thing you need to know is that sometimes we might tell you to adjust the operation of a program (like Python or your editor) by setting an environment variable. > I think that it would be too difficult to create a program that does > verbs as well as nouns. Yes, the Latin dictionary is too difficult for a first project. In addition to the mini projects in the tutorials, I will suggest that students create their own version of one or more of these games: hangman hammurabi hunt the wumpus mastermind / bolts & cliats Then we can move on to the Latin dictionary, or other practical project. -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Tue Jan 3 22:52:45 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Tue, 3 Jan 2006 22:52:45 -0500 (EST) Subject: [Verba] PC carcass resurrection no go Message-ID: Still no go. I have a Celeron 700Mhz with 128M, and after replacing the CPU fan tonight, it runs for 5 minutes, then reboots itself. Sigh. I think it needs a new motherboard. Some of the electrolytic capacitors are starting to leak. Microcenter is closed at 9pm, so it doesn't look like I'll have something ready by tomorrow noon. Hopefully, they will let us use a workstation in the AdFontes office. -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Tue Jan 3 22:55:27 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Tue, 3 Jan 2006 22:55:27 -0500 (EST) Subject: [Verba] Welcome Jillian Message-ID: You might want to check the mailing list archives at http://gathman.org/pipermail/verba/ I just got your email tonight. -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Wed Jan 4 17:24:15 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Wed, 4 Jan 2006 17:24:15 -0500 (EST) Subject: [Verba] Meeting summary, mind bender Message-ID: We mostly discussed arbitrary base numbering systems, focusing on binary and hexadecimal. Finally, we saw how to assign values to variables and use them in calculations. The theoretically most "efficient" (in size and energy use) number representation for both electronic and mechanical computers is trinary (closest integer base to "e", the natural logarithm base). The simplest trinary computers use signed ternary: http://www.mortati.com/glusker/fowler/ternary.htm The place values are powers of 3: 1, 3, 9, 27, 81, 243 etc, but each trit is +1,0,-1 -- *not* 0,1,2. You can write the trits |,0,- or +,0,-. So, for instance, |0-||- is +1 * 243 = 243 + 0 * 81 + -1 * 27 - 27 + +1 * 9 + 9 + +1 * 3 + 3 + -1 * 1 - 1 ----- 227 Extra credit: practice adding signed ternary. Notice that carries can be +1 or -1. Can you see why hardware implementing it is simple and efficient? Multiplication is equally simple and efficient. Question: why doesn't anyone make a signed ternary computer, when everyone agrees that hardware using it would be smaller and more efficient? -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Fri Jan 6 02:56:45 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Fri, 6 Jan 2006 02:56:45 -0500 (EST) Subject: [Verba] simple first project Message-ID: Once you've learned control structures (if,while,for), simple I/O (input(),print,sys.argv), and basic math and string operations from the tutorial, here is a simple exercise based on our discussion of bases: Write a Python program to convert between decimal and binary notation. You may use 01 as symbols for the bits. You saw me do one in class. Write a Python program to convert between decimal and signed ternary notation. You may use -0+ as symbols for the trits. If you get that far before the next meeting, email your solutions, and I'll be able to download them for class (I connected the network after the last meeting, and networking worked fine from Knoppix after pushing in the loose connector on the AirPort). ====== Class PC status: System I found a 466 Mhz Celeron system with 128M. It booted and ran, but froze up after a few minutes. I tested the memory and swapped the video card, and it seems to be stable now. However, it won't boot from CD - it starts to, but gets "read error". Swapping CDs and drives doesn't help. I'm suspecting a BIOS problem, and will try booting from diskette. Monitor I'm working on fixing a 15" LCD display. The backlight inverter is dead. It looks like one of the 220nJ100s blew - bits of molten metal are sticking out of it. If I can find a 220nJ100, I'll solder it in and see if that fixes it. Otherwise, an electrically compatible replacement will be available from lcdparts.com for $60 on Jan 20 - it will need new mounting posts, however. Until then, we'll have to make do with the jittery CRT. -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Sat Jan 7 15:01:18 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Sat, 7 Jan 2006 15:01:18 -0500 (EST) Subject: [Verba] Measuring information Message-ID: Here is a review of terms for counting bits (binary digits), extended to large numbers. This applies to byte addressable computers, which includes Mac and Intel. bits term abbr 1 bit 4 nybble 8 byte 1024 kilobit Kb 2**20 megabit Mb 2**30 gigabit Gb bytes term abbr 1024 kilobyte KB (2^10 not 10^3) 2**20 megabyte MB 2**30 gigabyte GB 2**40 terabyte TB 2**50 petabyte PB Now you have a low level idea of what is meant by "128 MB ram" or "this disk holds 500 GB" or "my network speed is 100 Mb / sec". NOTE: marketing brochures and magazine articles often confuse bits and bytes, so you don't know whether the transfer rate is really Mb/s or MB/s. A typical computer today has "registers": very fast hardware that holds and operates on values. At the machine code level, there will be instructions to load a value from memory into a register, operate on registers, and store registers to memory. For instance, "C = A + B" when compiled to machine code might look something like this: ldint r1,A ldint r2,B add r1,r2 stint r1,C The size of a register is called the "word size". The IBM XT and AT had 16 bit registers. The Intel 386 through Pentium have 32 bit registers. The Mac has always had 32 bit registers. The DEC 20 I used in college had 36 bit registers. -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Wed Jan 11 19:57:45 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Wed, 11 Jan 2006 19:57:45 -0500 (EST) Subject: [Verba] Meeting summary Message-ID: We are still interested in ternary arithmetic. The wooden ternary calculator of Thomas Fowler can be seen here: http://www.mortati.com/glusker/fowler/gallery.htm it is commemorated in a stained glass window. The Russians built 50 "Setun" computers, which were ternary: http://www.icfcst.kiev.ua/MUSEUM/PHOTOS/setun-1.html http://www.computer-museum.ru/english/setun.htm Until 30 years ago, most programmers were women. A Russian programmer: http://www.icfcst.kiev.ua/MUSEUM/PHOTOS/5E76B.html I stated that unlike human languages, computer languages were unambiguous, (although compiled languages like C have "undefined" constructs to allow greater efficiency after translation). The question, "Why then do computer programs have bugs?" led to a brief discussion of logical positivism and semantic holism - the idea being that errors can occur in the speaker, hearer, or transmission. There may be only one correct interpretation of a program, but a human reader doesn't always interpret it correctly. (And sometimes compilers or interpreters have bugs also.) Ironically, we are learning with the Python language, and there is a British comedy team called "Monty Python". And there is a tutorial on logical positivism and semantic holism based on Python (Monty Python, that is): http://www.mtholyoke.edu/~ebarnes/python/python.htm Jillian then took the keyboard, and with some prompting entered a program for converting numbers to binary notation. Changing this to output balanced ternary instead did not require further help: print "Enter a number." n = input() b = n s = [] while b > 0: c = "012"[b%3] print s,c,b s.append(c) b = b/3 s.reverse() print "".join (s) We left with one idea for outputting balanced ternary. However, the suggested idea was not a good one. Instead, the existing ternary program can output balance ternary by adding a single line. I'll give you a few days to think about it, then post my answer. ;-) -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Thu Jan 12 22:00:25 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Thu, 12 Jan 2006 22:00:25 -0500 (EST) Subject: [Verba] Coding Message-ID: In our last project, we used "strings". What is so special about a string? How does it store letters instead of numbers? Answer: it doesn't. String store numbers. A string in python is a sequence of 8-bit bytes - i.e. a sequence of numbers where each number has a value from 0 to 255. Python applications (and other languages) often use strings (sequences of bytes) to represent many other things. For instance, a 32-bit number can be stored in a 4 byte string by extracting the digits base 256. The string type in python displays its byte values differently than the number types - but the byte values are the same. You can convert between string and number types: >>> char(65) 'A' >>> ord('A') 65 The particular convention associating number with letters used by Windows, Unix, and Mac is called ASCII. The sucessor to ASCII, called Unicode, associates letters from every language on earth with 16-bit numbers. You will thoroughly understand coding after finishing this thick but entertaining book: G?del, Escher, Bach: An Eternal Golden Braid http://www.amazon.com/gp/product/0465026567/ Within you will find history, dialogs, drawings, music, genetics, and mathematical proofs. Genetics? Yes, the ultimate example of the power of coding. Until G?del, computers worked with numbers. Babbage called his calculating engine a "loom for numbers". G?del realized that numbers could represent arbitrary symbols - and this was the basis of his proof of G?del's Theorem (that no consistent mathematical system is capable of describing all mathematical truth). Now we take for granted that computers can work with symbols, sound, pictures, and more. -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Thu Jan 12 22:14:24 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Thu, 12 Jan 2006 22:14:24 -0500 (EST) Subject: [Verba] SPOILER: balanced ternary solution Message-ID: Here is a solution to printing balanced ternary: print "Enter a number." n = input() b = n s = [] while b > 0: c = "0+-"[b%3] print s,c,b if c == '-': b += 1 s.append(c) b = b/3 s.reverse() print "".join (s) The 'if' command obeys the "b += 1" command if and only if the condition "c == '-'" is True. The "b += 1" is a shortcut for "b = b + 1". In class next time, we will create a unit test for balanced ternary output. This is an important programming technique to check that your program is doing what you expect. The first step toward that end is to "encapsulate" our algorithm into a function: def bal(b): "Convert a number to a balanced ternary string representation" s = [] while b > 0: c = "0+-"[b%3] if c == '-': b += 1 s.append(c) b = b/3 s.reverse() return ''.join(s) print "Enter a number." n = input() print bal(n) -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Thu Jan 19 00:10:22 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Thu, 19 Jan 2006 00:10:22 -0500 (EST) Subject: [Verba] Meeting Summary Message-ID: I am copying Carol Brown, because Julie says she wants to know what is going on in the Computer Club. (If you want to get all the club email, you can sign up at http://gathman.org/mailman/listinfo/verba or just ask me to do it for you.) Only Jillian could make it today. First, we learned about unit testing, and added doctest specifications to our bal() balanced ternary function. It handled positive numbers just fine, but flunked negative and zero. Jillian fixed the program so that it passed the doctests, and the result is attached. Notice how the positive and negative cases are handled exactly the same. You take the negative of a balanced ternary number by changing all '+' to '-', all '-' to '+' and leaving '0' alone. Ternary logic is three valued. '+' = TRUE, '-' = FALSE, '0' = UNKNOWN. Ternary computers need fewer opcodes than binary, because, for instance, signed and unsigned arithmetic are the same, and logical complement is the same as arithmetic complement. Next, we looked at a "pharoh" game written by one of my daughters in 2001. (They couldn't spell very well yet.) After reading the program, and playing the game until she understood the logic, Jillian added a new variable: wisemen, who eat more and don't directly produce food, but increase yields and reduce shrinkage. The result is attached. We then looked at tuples, the simplest data structure element in python. A tuple is a fixed sequence of values of any type. >>> a,b,c = 3,'abc',(4,5) >>> b 'abc' >>> d,e = c >>> d 4 >>> f = (6,7) >>> f (6,7) Finally, we looked at lists. Our junk PC overheated at that point, but it was time to go home anyway. A list is a sequence of values that can be inserted, deleted, appended, and rearranged. Here is the shuffle example that got interrupted: >>> import random >>> deck = range(52) >>> deck [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51] >>> random.shuffle(deck) >>> deck [39, 23, 5, 28, 31, 1, 36, 29, 11, 43, 42, 41, 22, 45, 37, 30, 18, 26, 16, 4, 47, 25, 38, 14, 6, 12, 8, 48, 50, 44, 20, 10, 51, 33, 0, 49, 24, 9, 17, 27, 21, 34, 40, 3, 35, 32, 7, 15, 46, 2, 19, 13] >>> deck.sort() >>> deck [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51] -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. -------------- next part -------------- def bal(b): """Convert a number to a balanced ternary string representation >>> bal(15) '+--0' >>> bal(0) '0' >>> bal(-15) '-++0' """ if b == 0: return "0" s = [] while b != 0: c = "0+-"[b%3] if c == '-': b += 1 s.append(c) b = b/3 s.reverse() return ''.join(s) def _test(): import doctest,bal2 return doctest.testmod(bal2) if __name__ == '__main__': _test() print "Enter a number." n = input() print bal(n) -------------- next part -------------- from random import randrange deaths = [ "The survivers revolt and put a poisinous snake in your \ bed; you die.", "The survivers put poison in your drink; you die.", """You were taking a walk in the night, suddenly hands grab your shoulders... your funerel is very small only your wife is there.""", """You wake up in the middle of the night when you hear your wife scream the assasins are here you knew they would come - there was no food. You see a glint in the air, you try to hide but its to late you and your wife are buried the next morning.""", "The survivors revolt, you are thrown out of a window.", """The survivers revolt, they starve you, whip you till your half dead, then chop your head off.""", """you are riding your horse by a cliff suddenly a stone flys through the air and hits your horse. He rears and you fall into the cliff...""", """ Their is a war because of the lack of food, half the city is on yor side, and the other half is against you, you die fighting.""" ] grain = 2000 people = 500 wisemen = 0 while True: print "There are %d peasants in your city." % people print "You have %d bushels of grain." % grain print "You have %d wisemen." % wisemen promotions = input ("How many peasants do you want to promote to wisemen?") if promotions > people: print "You don't have that many peasants." continue wisemen += promotions people -= promotions print "You now have %d peasants and %d wisemen." % (people, wisemen) plant=input("How much will you plant?") if plant > people: print "With only %d peasants, you can plant at most %d bushels." % ( people,people ) continue food=input("How much food will you give the people?") if food + plant > grain: print "We don't have that much grain." continue yld=randrange(0,11) harvest=yld*plant store=grain-plant-food shrinkage=randrange(10,50)- wisemen/15 if shrinkage < 0: shrinkage = 0 loss=store*shrinkage/100 print "You harvested %d bushels." % harvest print "You stored %d bushels." % store print "the rats ate %d bushels." % loss grain = store - loss + harvest req = people + 2 * wisemen # food required for subsistence if food > req: migration = randrange(0,50) * (food - people) / 100 print "%d peasants came to the city." % migration people = people + migration elif food < req: starved = max(req - food,people) print "%d peasants starved." % starved people = people - starved if starved > people /2: print deaths[randrange(0,len(deaths))] break From tsgoldsun1 at gmail.com Thu Jan 19 16:16:48 2006 From: tsgoldsun1 at gmail.com (Taylor Solomon) Date: Thu, 19 Jan 2006 16:16:48 -0500 Subject: [Verba] Hey Nice Job Message-ID: Man, that program is nice. There are a few functions I do not understand, but that is cool how the bal() works. So ternary is how we will check our programs to see if they work correctly? How everyone doing with putting python on their computer? Maybe sometime we can write a small program/game like the pharaoh game in class, type it up, and show Mr. Gathman. See ya. Taylor Solomon tsgoldsun1 at gmail.com From stuart at gathman.org Thu Jan 19 20:30:24 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Thu, 19 Jan 2006 20:30:24 -0500 (EST) Subject: [Verba] Data Structures Message-ID: To practice with basic data structures, write a Python implementation of "Hunt the Wumpus": http://www.taylor.org/~patrick/wumpus/instruct.html You may, of course, modify the rules if desired. If you have any code - even if it is incomplete, post it to the list. The rest of us will make suggestions and/or expand/fix it. -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Thu Jan 19 20:36:03 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Thu, 19 Jan 2006 20:36:03 -0500 (EST) Subject: [Verba] Availability Message-ID: I am always available for questions via email, and on AIM (SDGathman). P.S. How many of you Latin buffs understand my sig? -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Fri Jan 20 20:57:00 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Fri, 20 Jan 2006 20:57:00 -0500 (EST) Subject: [Verba] Hey Nice Job In-Reply-To: Message-ID: On Thu, 19 Jan 2006, Taylor Solomon wrote: > Man, that program is nice. There are a few functions I do not > understand, but that is cool how the bal() works. > > So ternary is how we will check our programs to see if they work > correctly? No, unit testing is how we will check our programs. The bal2.py program was an example. The unit tests uncovered some bugs (it only worked for positive numbers), which we then fixed. -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Sat Jan 21 12:46:09 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Sat, 21 Jan 2006 12:46:09 -0500 (EST) Subject: [Verba] Nemesis Coding Message-ID: Hello Pythonistas, I ran across this little puzzle for you to practice with. On the Slashdot blog, http://science.slashdot.org , there was an article about the Nemesis theory: http://www.binaryresearchinstitute.org "The Binary Companion or 'Nemesis' theory asserts that a yet-to-be discovered companion to our Sun may actually exist. Recent observations of two nearby stars (assumed companions) show debris disks 'strikingly like the Kuiper Belt int the outer part of our Solar System'. The Binary Research Institute site is devoted to the theory, and presents a concise introduction, list of evidence, and sample calculations in support of the theory. A fascinating read, although the physics and related calculations are not trivial." One of the comments was the following: 010000100110100101101110011000010111001001111001 01010011011010000110111101101111011101000010000100 100000010101110110010100100000 01101100011010010111011001100101001000000110100101 101110001000000110000100100000 01100010011010010110111001100001011100100111100100 100000011100110111100101110011 01110100011001010110110100111111 Refer to my previous email on Coding, except there was a misspelling. To convert codes to chars, the builtin python functions are: chr( i) Return a string of one character whose ASCII code is the integer i. For example, chr(97) returns the string 'a'. This is the inverse of ord(). The argument must be in the range [0..255], inclusive; ValueError will be raised if i is outside that range. int( [x[, radix]]) Convert a string or number to a plain integer. If the argument is a string, it must contain a possibly signed decimal number representable as a Python integer, possibly embedded in whitespace. The radix parameter gives the base for the conversion and may be any integer in the range [2, 36], or zero. If radix is zero, the proper radix is guessed based on the contents of string; the interpretation is the same as for integer literals. If radix is specified and x is not a string, TypeError is raised. Otherwise, the argument may be a plain or long integer or a floating point number. Conversion of floating point numbers to integers truncates (towards zero). If the argument is outside the integer range a long object will be returned instead. If no arguments are given, returns 0. You have learned about subscripting strings. Write a python program to decode the message. Do not depend on whitespace (spaces) in the input. Here was a reply: Re: 010000100110100101101110011000010111001001111001 01000001 01100011 01110100 01110101 01100001 01101100 01101100 01111001 00101100 00100000 01001001 00100111 01101101 00100000 01110010 01100001 01110100 01101000 01100101 01110010 00100000 01100001 01101101 01100001 01111010 01100101 01100100 00101110 00100000 00100000 01001001 00100000 01101000 01100001 01100100 00100000 01100001 00100000 01110010 01100001 01110100 01101000 01100101 01110010 00100000 01101100 01101111 01110111 00100000 01101111 01110000 01101001 01101110 01101001 01101111 01101110 00100000 01101111 01100110 00100000 01110100 01101000 01100101 00100000 01010011 01101100 01100001 01110011 01101000 01100100 01101111 01110100 00100000 01110010 01100101 01100001 01100100 01100101 01110010 01110011 01101000 01101001 01110000 00100000 01110101 01101110 01110100 01101001 01101100 00100000 01001001 00100000 01110011 01100001 01110111 00100000 01110100 01101000 01100001 01110100 00100000 01111001 01101111 01110101 01110010 00100000 01100011 01101111 01101101 01101101 01100101 01101110 01110100 00100000 01100111 01101111 01110100 00100000 01101101 01101111 01100100 01100100 01100101 01100100 00100000 01110101 01110000 00100001 00100000 00100000 01001110 01101111 01110111 00101100 00100000 01001101 01111001 00100000 01110110 01101001 01100101 01110111 00100000 01101000 01100001 01110011 00100000 01100011 01101000 01100001 01101110 01100111 01100101 01100100 00101110 00101110 00101110 00100000 01110100 01101000 01100101 01110010 01100101 00100000 01110011 01100101 01100101 01101101 01110011 00100000 01110100 01101111 00100000 01100010 01100101 00100000 01101001 01101110 01110100 01100101 01101100 01101100 01101001 01100111 01100101 01101110 01110100 00100000 01101100 01101001 01100110 01100101 00100000 01101111 01101110 00100000 01010011 01101100 01100001 01110011 01101000 01100100 01101111 01110100 00100001 00001010 00001010 01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01101100 01101001 01101011 01100101 00100000 01010011 01000101 01010100 01001001 01000000 01001000 01101111 01101101 01100101 00100001 -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From tsgoldsun1 at gmail.com Sat Jan 21 22:45:26 2006 From: tsgoldsun1 at gmail.com (Taylor Solomon) Date: Sat, 21 Jan 2006 22:45:26 -0500 Subject: [Verba] (no subject) Message-ID: <6C0B78CD-68C1-4E10-ACFB-7F71778A8FD8@gmail.com> Hey All I was thinking for the wumpus game...What is the structure of the rooms? Does somehow the rooms just never end because the tunnels in the rooms connect to random other rooms? Say you have room one. rooms 2,3,and 4 connect to it. if you go through 2, you can go to 5,6 and 7, and so on. until you reach the end. What do we do at the end? We would have to create each room to connect to one of the ones before it. This is very confusing Please help anybody with a brain. Taylor Solomon tsgoldsun1 at gmail.com From stuart at gathman.org Sun Jan 22 00:27:31 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Sun, 22 Jan 2006 00:27:31 -0500 (EST) Subject: [Verba] Nemesis Coding In-Reply-To: Message-ID: On Sat, 21 Jan 2006, Taylor Solomon wrote: > So I have got this > > i = int('010000100110100101101110011000010111001001111001', 0) > > chr(i) > > What am I doing wrong? Perhaps you meant this: i = int('010000100110100101101110011000010111001001111001', 2) That will convert the binary string to a (large) number. That large number will then need to be decomposed base 256 to get the 8 bit bytes that can be converted to characters. My solution splits the binary string into 8 bit pieces first. Either way will work. I'll post my solution after you've chewed it over a bit more. -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Sun Jan 22 00:40:35 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Sun, 22 Jan 2006 00:40:35 -0500 (EST) Subject: [Verba] (no subject) In-Reply-To: <6C0B78CD-68C1-4E10-ACFB-7F71778A8FD8@gmail.com> Message-ID: On Sat, 21 Jan 2006, Taylor Solomon wrote: > I was thinking for the wumpus game...What is the structure of the rooms? > > Does somehow the rooms just never end because the tunnels in the > rooms connect to random other rooms? The rooms never end in the same sense that travelling east never ends. In the game as described, there are exactly 20 rooms, each connecting to 3 other rooms. Supposed there were 4 rooms, each connecting to three other rooms. That would be a tetrahedron. Each room is one of the four vertices. Each vertice connects to the 3 other rooms. The 20 rooms, each connecting to 3 other rooms, form the 20 vertices of a dodecahedron. Extra credit: How many faces? How many sides to a face? How many edges? > Say you have room one. rooms 2,3,and 4 connect to it. if you go > through 2, you can go to 5,6 and 7, and so on. until you reach the > end. What do we do at the end? We would have to create each room to > connect to one of the ones before it. > > This is very confusing > > Please help, anybody with a brain. Lets look at it with 4 rooms numbered 1,2,3,4: Room Connects to 1 2 3 4 2 1 3 4 3 1 2 4 4 1 2 3 You can wander from room to room forever, but the there are still only 4 rooms. Does that make you think of a Python list? E.g. (changing to 0 origin): connections = [(1,2,3),(0,2,3),(0,1,3),(0,1,2)] -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Mon Jan 23 00:49:35 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Mon, 23 Jan 2006 00:49:35 -0500 (EST) Subject: [Verba] Nemesis Coding In-Reply-To: Message-ID: On Sat, 21 Jan 2006, Taylor Solomon wrote: > So I have got this > > i = int('010000100110100101101110011000010111001001111001', 0) > > chr(i) > > What am I doing wrong? There are 10 kinds of people in the world: those who understand binary, and those who don't. Sorry, couldn't resist :-) -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Mon Jan 23 01:19:54 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Mon, 23 Jan 2006 01:19:54 -0500 (EST) Subject: [Verba] Re: Nemesis Coding Solution Message-ID: > There are 10 kinds of people in the world: those who understand > binary, and those who don't. Here is my solution: (Requires python2.4 - needs extra brackets for python2.3) def decode(c): """Decode binary strings to ASCII >>> decode('010000100110100101101110011000010111001001111001') 'Binary' """ c = ''.join(c.split()) # remove whitespace return ''.join(chr(int(c[i:i+8],2)) for i in range(0,len(c),8)) # Make into a program that can decode a message from stdin: import sys print decode(sys.stdin.read()) -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Mon Jan 23 16:50:43 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Mon, 23 Jan 2006 16:50:43 -0500 (EST) Subject: [Verba] Re: Nemesis Coding: Taylor's solution completed Message-ID: I have attached a completed version of Taylor's approach. It is instructive in its own right. -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. -------------- next part -------------- def decode(s): """Decode binary strings to ASCII >>> decode('010000100110100101101110011000010111001001111001') 'Binary' """ n = int(s,2) r = [] while n > 0: r.append(chr(n%256)) n /= 256 r.reverse() return ''.join(r) def _test(): import doctest,bin2 return doctest.testmod(bin2) # Make into a program that can decode a message from stdin: if __name__ == '__main__': _test() import sys print decode(sys.stdin.read()) From stuart at gathman.org Tue Jan 24 02:47:57 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Tue, 24 Jan 2006 02:47:57 -0500 (EST) Subject: [Verba] Re: Nemesis Coding: Taylor's solution completed In-Reply-To: <015a01c62084$d7412320$6401a8c0@CPQ2003> Message-ID: On Mon, 23 Jan 2006, Rebecca Chenette wrote: > Um,....i opened taylor's approach and I got a blank page. Is that what is > supposed to happen? If by "open" you mean run the program (a typically dangerous thing for Windows to do with an email attachment), then you need to run it from a command line. The 'stdin' part means to read the "standard input" as input. At a command prompt, after starting the program, you would then type/paste the binary, followed by a Control-D. (Or maybe on Windows it is still F6 like it was in DOS - can someone help with that Window question?) Another way of using "standard input" is to enter the data into a file. For instance, use notepad or whatever to create a test file called "msg1.txt" with the binary digits. Then run the program with a "redirect input" like this (the C:\work> is the Windows prompt, which will vary with what your current directory is): C:\work> python bin2.py Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Tue Jan 24 17:43:34 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Tue, 24 Jan 2006 17:43:34 -0500 (EST) Subject: [Verba] Re: Nemesis Coding: Taylor's solution completed In-Reply-To: <004801c62127$650e8790$6401a8c0@CPQ2003> Message-ID: On Tue, 24 Jan 2006, Rebecca Chenette wrote: > "Run it from a command line" is the part i need to figure out. You're > right about the whole windows not being very cool about running programs > from an email attachment. How do I get to the command line? I can talk with > you about it tomorrow, if you like. This time I'm not planning on being > ill:) 1) Right click on attachment as "Save As". Make sure you remember which directory you saved it in. You might want to create a folder for your python stuff. 2) From the Start Menu, find "Command Prompt". This can be hard to find since they keep moving it around, so instead you can select "Run Program" and enter "CMD" as the program. 3) At the Command prompt, enter "CD \PATH\TO\MY\PYTHON\FOLDER" where you saved the attachment. 4) At the CMD prompt, you can use "TYPE bin2.py" to display the file, or "NOTEPAD bin2.py" to edit with NOTEPAD. 5) At the CMD prompt, type "python bin2.py" to run. Or first edit a data file with NOTEPAD/VIM/whatever ("NOTEPAD data.txt") and run with "python bin2.py Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Tue Jan 24 23:42:24 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Tue, 24 Jan 2006 23:42:24 -0500 (EST) Subject: [Verba] Re: Nemesis Coding: Taylor's solution completed In-Reply-To: <013001c6214f$f2ad3b50$6401a8c0@CPQ2003> Message-ID: On Tue, 24 Jan 2006, Rebecca Chenette wrote: > I got to command prompts things. Where I messed up is #3.You told me to > type that quote in wher I saved the attachment...on command prompt. > here...I'll type out what the screen looks like after I tried all the stuff. > > Microsoft Windows XP [Version 5.1.2600] > Copyright 1985-2001 Microsoft Corp. > > C:/Documents and Setting/Owner>CD/PATH/TO/PYTHON/FOLDER > The system cannot find the path specified. You are supposed to substitute the actual path where you saved the program for "\path\to\python\folder". It is an informal "abstract path", that stands for whatever name you gave your folder. -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Thu Jan 26 11:23:50 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Thu, 26 Jan 2006 11:23:50 -0500 (EST) Subject: [Verba] Meeting summary Message-ID: Jillian had to study for tests, so only Rebecca came. We examined pathnames, URLs and coding. Pathnames uniquely identify files on a computer. An URL extends a pathname to include the name of the computer it resides on and the access protocol. On Windows, the Windows Explorer is a GUI view of the pathname tree. On Gnome (one of the Linux destops), we looked at the File Browser. On Mac, I believe the Finder is the equivalent. I encouraged Rebecca to browse around her Windows system using Windows Explorer. (But don't delete or rename any files.) Then we went back to coding, and trying to understand the binary message (Nemesis Coding). The message is a sequence of numbers, expressed in binary notation. There is a standard mapping from numbers to characters called ASCII. The Aha! moment came while viewing the ASCII chart: http://www.lookuptables.com/ and the chart for an older standard mapping (EBCDIC): http://www.legacyj.com/cobol/ebcdic.html and the (thousands of) charts for the modern Unicode mapping: http://www.unicode.org/charts/ The Unicode-16 mapping extends ASCII to 16-bit numbers, and covers all modern languages on earth except classic Chinese. Unicode-16 covers Simplified Chinese (like pidgeon English), which has about 20000 symbols and all phonetic or syllabic languages currently or recently in use. Classic Chinese has over 100000 symbols. Unicode-32 covers Classic Chinese, ancient scripts and fictional languages (e.g. Klingon). We also talked about how written Chinese is non-phonetic and does not correspond to a spoken language. The empire had multiple spoken languages, and the written language was independent and common to all the spoken languages. It unified the empire. Written Chinese is composed of ideograms - symbols representing ideas and concepts. -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Sun Jan 29 00:10:01 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Sun, 29 Jan 2006 00:10:01 -0500 (EST) Subject: [Verba] Nemesis Coding (revisited) and DNA coding Message-ID: Here is a simple exercise: write a program that accepts text as input, and outputs binary ascii code like the message you just decoded. You can either include the text in the program as a constant: txt = "This is a test." or use sys.stdin.read() like the example decoder programs. We've spent a lot of time on coding, but it is a deep principle. It is the basis of biology. Current computers use 8-bit bytes. But the cells in your body use 6-bit bytes. Instead of using 2 state bits, cells use 4 nucleotides (so that each nucleotide is equivalent to 2 bits). The 4 nucleotides are represented by 4 letters: UCAG for RNA and TCAG for DNA. The bytes (called 'codons' by biologists) map to amino acids: http://users.rcn.com/jkimball.ma.ultranet/BiologyPages/C/Codons.html You could use binary to represent the 4 DNA nucleotides: 00 = T 01 = C 10 = G 11 = A Every DNA sequence has an "antisense" sequence which is the same sequence with all bits reversed. In computers, this is called the NOT operation. In python, the NOT operation is performed by the "~" operator. In biology, the T and A nucleotides attract each other, and the C and G attract each other. So a strand of DNA quickly has the opposite nucleotides attach to it forming the antisense strand. For instance, if the DNA strand is TAGCCAGCTTAG, then free floating nucleotides will start to attach: TAGCCAGCTTAG --> TAGCCAGCTTAG --> TAGCCAGCTTAG --> TAGCCAGCTTAG G C A CGG CGA ATCGG CGAA C ATCGGTCGAATC Exercise: write a program to compute the antisense sequence for any DNA sequence. Translate the nucleotide letters to binary, then use the "~" operator. Examples of NOT: >>> ~5 -6 >>> ~1 -2 >>> ~2 -3 Whoa! Negative numbers? Integers in python are treated as infinite bit sequences. When all the bits to the "left" (more significant) of the interesting bits are 0 to infinity, then the number is positive (or zero). When all the bits to the left of the interesting bits are 1, then the number is negative. So for instance ~0 == -1, because the NOT reverses all the bits out to infinity. (Of course, the computer doesn't *really* store infinite bits. It just treats the most significant bit stored as if it extended to infinity.) Here is an outline of your program to get you started. It will use all the things you have (hopefully) learned so far. 1. Make a function (remember 'def') to convert the letters of a DNA sequence to a number. 2. Make a function to convert a number to the letters of a DNA sequence. (You need some sophisticated equipment to actually convert to a DNA sequence :-) 3. Read a sequence, convert to a number, NOT, convert to letters again, print. -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Sun Jan 29 00:25:01 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Sun, 29 Jan 2006 00:25:01 -0500 (EST) Subject: [Verba] Nemesis Coding (revisited) and DNA coding In-Reply-To: Message-ID: On Sun, 29 Jan 2006, Stuart D. Gathman wrote: > Here is an outline of your program to get you started. It will use all > the things you have (hopefully) learned so far. > > 1. Make a function (remember 'def') to convert the letters of a DNA > sequence to a number. > > 2. Make a function to convert a number to the letters of a DNA sequence. > (You need some sophisticated equipment to actually convert to a DNA > sequence :-) > > 3. Read a sequence, convert to a number, NOT, convert to letters again, > print. Actually, it is simpler if you just build the antisense letter by letter. So ignore the above. You might want to use a feature of python we haven't encountered yet: the "for" loop. Strings, tuples, and lists are sequences. You can do something with each member of a sequence in turn like this: >>> s = 'ABC' >>> for c in s: print ord(c), ... 65 66 67 You will find this very useful. -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Sun Jan 29 00:53:57 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Sun, 29 Jan 2006 00:53:57 -0500 (EST) Subject: [Verba] Two's complement In-Reply-To: Message-ID: On Sun, 29 Jan 2006, Stuart D. Gathman wrote: > >>> ~5 > -6 > >>> ~1 > -2 > >>> ~2 > -3 > > Whoa! Negative numbers? Integers in python are treated as infinite bit > sequences. When all the bits to the "left" (more significant) of the > interesting bits are 0 to infinity, then the number is positive (or zero). > When all the bits to the left of the interesting bits are 1, then the > number is negative. So for instance ~0 == -1, because the NOT reverses > all the bits out to infinity. (Of course, the computer doesn't *really* > store infinite bits. It just treats the most significant bit stored as > if it extended to infinity.) You will still be surprised by the results of the NOT operator, until we have explained "two's complement". Suppose you have a 4 digit decimal calculator with no sign. You could represent negative numbers as 10000 - number. For instance, -1 would be 9999, -2 would be 9998, etc. Addition works out just the way it should (assuming the calculator discards digits beyond 4). For instance, 2 - 3 is 2 + -3 which is 2 + 9997, or 9999 which is -1. This is called "ten's complement". Binary computers use a similar system base 2. (Actually, older binary computers used a "one's complement" system where negative numbers had all bits reversed from the positive number.) If you have 8 bit bytes, then -1 is 11111111. Python integers use two's complement arithmetic with an "infinite" word size. For instance, in infinite ten's complement, -2 would be ...999998, where there are an infinite number of 9s to the left. Similarly, -2 in infinite two's complement is ...111110, where there are an infinite number of 1s to the left. -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Tue Jan 31 14:10:27 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Tue, 31 Jan 2006 14:10:27 -0500 (EST) Subject: [Verba] Virtual club meeting? Message-ID: How about a virtual club meeting via IM? -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial. From stuart at gathman.org Tue Jan 31 16:33:11 2006 From: stuart at gathman.org (Stuart D. Gathman) Date: Tue, 31 Jan 2006 16:33:11 -0500 (EST) Subject: [Verba] Virtual club meeting? In-Reply-To: <04DCBEEC-3D64-4B39-B0B4-54EBCECCE484@gmail.com> Message-ID: On Tue, 31 Jan 2006, Taylor Solomon wrote: > I have a cool program (like trillian, Mr. Gathman) called "Fire." > It's the all-in-one solution Yes, gaim for Linux/Windows/Mac is similar. > AIM : burningsun567 > Yahoo messenger: tsgoldsun1 AIM: SDGathman (boring, I know) > When should we do it? I was thinking Wednesday, at the normal club time, since there is no school on Wednesday. Another alternative is to meet at a house. -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flamis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial.