ࡱ> ` [bjbj 1  4[[[8 \\&n]L]L^^^^^^$܆hD˄ 5_^^5_5_˄ ^^~~~5_ ^ ^~5_~~G y^b] `0aQ[1v`x0&c},y y,^>D^,~p^$^^^^˄˄~d^^^&5_5_5_5_M[[    (There is also a file called Essential.info.DD.and.DDC.doc with vital password and basic structure info). By D. Harris, last updated 2007 Feb 07 pm 2:30 Pacific Time Important Methods (usually for routine activities) for DarwinDay.org and DarwinDayCelebration.org: Network: On 30Jan'05, trying to install the Dell printer on the Ethernet (wireless and wired router box) network, Tech Support from Dell and I were unable to figure out the Network Administrator name and password. That is the combination needed when doing a remote installation of the printer software. But finally they told me that I could use the Dell blue printer CD to install the printer (by installing its drivers) on the local computer (named DDC2) that we stuck the CD into. The Dell MFP printer's own protection is either admin/admin or admin/password (settable with the CD for the Dell printer drivers, re-settable from the control panel). To move newest signups (supporters and email-only) from the remote to the mailing database: Remove the duplicates from the remote persons database. Select all the fields of the persons on the remote database using SELECT * FROM `persons` FOR ALL GROUPS OF PROFESIONALS E-MAILINGS: METHOD 1 [Now outdated. Use Method 3 instead]: Use a SQL SELECT command to retrieve the desired names from the REAL database on the remote machine (see one example code below). Use the MySQL administrator program to Export the desired fields in .csv data format. Set Fields Terminated By tabs to '|', no enclosing of fields, the other fields as their defaults. Check the box for "Put field names at first row" if you expect to need the reminder of what the fields/columns represent. Save the file on your local hard disk as "Whatever.csv", checking "Save as File" with "None" compression. The program statestocodes.pl will translate a column of state names (upper or lower case) into the 2 character USPS abbreviations. To make the insertion (loading) of data, either use programs of the style of For a mailing to all the contact persons in 2005: SELECT `contact`, `email` FROM `event` WHERE YEAR( eventdatetime ) = '2005' ORDER BY 'email' LIMIT 0 , 400 SELECT `eventsernum` , `contact` , `email` , YEAR( eventdatetime ) FROM `event` ORDER BY 'email' LIMIT 0, 400 SELECT `persontitle` , `personname` FROM `person` WHERE YEAR( eventdatetime ) = '2005' ORDER BY 'email' LIMIT 0 , 400 Working from a template file like "outreach1.doc", use the Tools/Letters and Mailings/MailMerge to start the MailMerge Wizard. Say you are making "E-mail messages". When you are ready to generate the messages, output from the MailMerge by clicking the icon for MERGE TO NEW DOCUMENT (not to an e-mail) to get the big file we need. Use the Default character encoding and Plain Text (or Filtered HTML for HTML messages) format. Name the file "Unsent Messages.txt" (or .htm) and rename it later as "Unsent Messages". Have the Mail handler program (Mozilla Communicator or Thunderbird) exited. I.e. do not have it open. You may have to close the Mozilla browser too. Firefox needn't be closed. 'C:\Documents and Settings\User 2\Application Data\Mozilla\Profiles\default\hhetgoov.slt\Mail\Local Folders\ Unsent Messages' is the file that will be created by techniques like MailMerge in Word, and then sent by being copied and pasted to that long address. [It's different for Thunderbird, for which the procreturns.pl program is written.] Be sure you are using the rstephens@DarwinDayCelebration.org account, and then use File/Send Unsent Messages to send all the messages. You may want to Exit after each bunch to avoid suspiciously large sendings. The SMTP protocol at smtp.earthlink.net seems to break frequently, or is programmed to do so if a lot of mail comes through in a short time. After sending the Unsent Messages, select the Local Folders mail account and File/Compact Folders, to remove the marked messages that have been sent. METHOD 2: There is now an emailing database with all the persons data and personfacts describing things about their email identity. So the following is too short. Go to METHOD 3! There is now a Perl program for sending emails using SMTP at semi-random intervals: sendit.pl or names of that sort that end in .pl meaning Perl. Use SQL to extract the names and fields to be used in the mailing from the MySQL database on the host computer (HostRocket.com). SELECT `persontitle` , `personname`, `email`, `mayemail`, `maydisplay` FROM `person` WHERE `mayemail` = 'y' ORDER BY `personsernum` LIMIT 0, 400 Or maybe SELECT `profname` , professor.email FROM `professor` LEFT JOIN `unsubscribers` ON professor.email=unsubscribers.email WHERE unsubscribers.email IS NULL ORDER BY 'profname' LIMIT 0, 4000; Export as a CSV file for MS Excel (the Windows 2000 version, not the 2003 version). Delete column heading line (if any) in Excel. Save as a Tab delimited file and reopen with Notepad. Replace all Tab characters with '|' characters for the separator. (highlight a Tab and ^C to copy it, so you have something to drop into the FIND box). Save the textfile to good named file, like regs.bars.txt. Read and use the directions at the top of the template *.textmsg file and also the comments near the start of sendit.pl. You can copy in a HTML formatted message by saving the message in "Send Later", and going to the Local Folders under the Mail folder from the operating system. There may be old messages present but not yet removed by "Compact Folders". Use Notepad to copy the message to the Perl *txtmsg file. Remove unnecessary header material. BE SURE YOU ARE WORKING ON A TEXT IN THE SAME DIRECTORY AS THE DATA! XX METHOD 3 (May 2006): Remove the duplicates from the remote persons database. Select all the fields of the persons on the remote database using SELECT * FROM `person` ; , or better = click on Browse at the top of the persons screen On the resulting output, at the bottom, click Export Export as a CSV file, fields terminated by '|', fields enclosed by NOTHING, fields escaped by '\', lines terminated by '\r\n', replace NULL by NULL. UNcheck the box before "Put fields names in the first row". Click "Save as file" and then click "Go" to export to the local PC. Choose "Save to disk" as a Comma Separated Values file (.csv), into a place like the "My Documents/Supporters" folder with an appropriate filename. Open with Notepad and change the field separators to '|' if necessary. Save the file. Use this SQL on the local mailing database to get the next personsernum to use if you're loading them into the mailing database: SELECT MAX(personsernum) FROM person ; Use Perl script load.newsignups.pl to read thru the .csv file that came from the remote computer and generate SQL to insert only NEW persons (NEW emails) into the mailing database. RETURNED E-MAILS: The procreturns.pl program should be run with the Thunderbird emailer CLOSED (EXITed), and then Thunderbird restarted to see the new processed emails. The *.msf files will be created by Thunderbird for the matching named files and folders. To discard Extracted and Problem messages, have T'bird closed and delete the desired folders from the appropriate Mail subdirectory. After processing the returned emails with procreturns.pl, you can save the ProblemReturns for future processing by: Exiting Thunderbird Making a copy of the Returns.sbd folder (for safety until there is no question of lost messages) Deleting the Returns.sbd folder Renaming the ProblemReturns.sbd folder to the Returns.sbd folder name and deleting any files that start with 'ProblemReturns.' . Starting Thunderbird again. Now future incoming mail will go into the Returns folders with the old ProblemReturns messages, and future runs of procreturns.pl will try again to extract from the total combinations of new and previously tried messages. Unsubscribers Script unsubs.extractractor2.pl will run through the compacted unsubscribers Inbox and extract the emails in the From: lines. I've written a Perl script called unsubs2sql.pl that takes a file of text email addresses and turns them into single lines of INSERT commands. It can be used to create the SQL for inserting new lines into the database table "unsubscribers". MySQL TIMESTAMP change coming: At this writing, HostRocket uses MySQL version 4.0.22 (see the HostRocket Control Panel, left hand column). At some time HostRocket will upgrade to MySQL 4.1 or higher. There is a chance that our TIMESTAMP related code will be broken at that point. See the Person table for instance, where TIMESTAMP was used to show when a person registered, and compared with a "when valid" field that showed when the field was confirmed as good values. There will be another change when MySQL versions 5.0.2 or later are reached. For the complex details, see the online MySQL documentation at  HYPERLINK "http://dev.mysql.com/doc/mysql/en/timestamp-4-1.html"http://dev.mysql.com/doc/mysql/en/timestamp-4-1.html . USEFUL SQL SAMPLES: For loading a few hundred persons and create personfacts entries as appropriate, use a Perl program like load.sciclubs.pl . For loading data that would require files larger than 2048K in size (of SQL), use instead the LOAD INLINE bulk loading command of MySQL, at  HYPERLINK "http://dev.mysql.com/doc/refman/5.0/en/load-data.html"http://dev.mysql.com/doc/refman/5.0/en/load-data.html like: LOAD DATA LOCAL INFILE './medprofs.emails.txt' INTO TABLE `emailbase.testdb` FIELDS TERMINATED BY '|' TERMINATED BY '\r\n' (`personsernum`, `email`) SET `lastupdated` = CURRENT_TIMESTAMP; For knowing how many in each department in the professors table: SELECT `department`, COUNT(`department`) FROM `professor` GROUP BY `department` LIMIT 0,300 ; How many Supporters? On the remote database run: SELECT `maydisplay`, COUNT(`maydisplay`) FROM `person` GROUP BY `maydisplay` LIMIT 0,300 ; 24May06 IN DEVELOPMENT NOT USEFUL YET: SELECT rperson.* FROM `rperson` LEFT JOIN person ON person.email = rperson.email WHERE person = 'withpaper' AND person.personsernum = personfacts.personsernum AND unsubscribers.email IS NULL ORDER BY person.email LIMIT 0, 200 Above query comes from this valid pattern: SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id WHERE table2.id IS NULL; What titles and how many of each?: SELECT `persontitle`, COUNT(`persontitle`) FROM `person` WHERE 'persontitle` LIKE 'Prof%' GROUP BY `persontitle` LIMIT 0,300 Counting Evolution Sunday churches: SELECT COUNT( `public` ) FROM `event` WHERE `eventname` LIKE '%Evolution Sunday%' For the table of arbitrary facts (PERSONFACTS) applied to various persons in the local mailing database: SELECT `factname` , COUNT( `factname` ) , MIN( `pfnum` ) , MAX( `pfnum` ) FROM `personfacts` GROUP BY `factname` LIMIT 0 , 300 ; How many kinds of personfacts are there? Local db. SELECT factname, COUNT(factname) AS NumOccurrences FROM personfacts GROUP BY factname For all the persons of a particular group, into a display that can be EXPORTed and fed to the Perl mailing program: [Need to check against unsubscribers!] SELECT * FROM `person`,`personfacts` WHERE (factname = 'issupporter') AND (person.personsernum = personfacts.personsernum) 4Jan2006: Drawing out the duplicated records from the mailing database: SELECT * FROM `person`,`personfacts` ,`dups` WHERE (dups.email = person.email) AND (person.personsernum = personfacts.personsernum) ORDER BY person.personsernum LIMIT 0,500 Counting the UNIQUE/DISTINCT persons: SELECT COUNT(DISTINCT email) FROM `person` LIMIT 0, 30 4Jan2006: Isolating the duplicate email addresses (no longer required because the `person.email` field is now indexed as UNIQUE). May18: The UNIQUE is only on the mailing database version of email, because people are being allowed to enter themselves on the remote database! If they attempt an update by adding a new entry that duplicates an email, we don't block them. This can change when we have logins to sessions. SO this SQL is for use with the remote database, isolating the duplicates in that: SELECT email, COUNT(email) AS NumOccurrences FROM person GROUP BY email HAVING ( COUNT(email) > 1 ) For use on the remote database, to select records that may be duplicates of the person, but do add possible new personfact records about the person (22May06): THIS DOESN'T MAKE SENSE!!! REPLACE INTO `PERSON` VALUES ('75839','Robert Stephens','Dr.', 'NULL','343 Lexington','NULL', 'Menlo Park','CA','94025', '892','rjstsi@aol.com','NULL','', 'y','y','2004-10-29 00:00:00','20041029000000') For revising things like the country numbers in the database: UPDATE event SET `country` = 408 WHERE `country` = '372' --------------------------------------------------------------- For getting professors of a particular department, WITH UNSUBSCRIBERS EXCLUDED. THIS DOESN'T WORK (because there is no nested SELECT before MySQL 4.1 which is not on Hostrocket, so see the rework below: SELECT `profsernum` , `profname` , `email` , `department` FROM `professor` , `unsubscribers` WHERE (`department` LIKE 'Organis%') AND (professor.email != unsubscribers.email) LIMIT 0 , 900 This is a reworking of the above without nested SELECT, and it DOES exclude the unsubscribers: [This does select the PR mailing list as 4 fields. 14Jan06 ] SELECT personfacts.factvalue1, person.stateprovetc, person.personname, person.email FROM person, personfacts LEFT JOIN unsubscribers ON person.email = unsubscribers.email WHERE personfacts.factname = 'withpaper' AND person.personsernum = personfacts.personsernum AND unsubscribers.email IS NULL ORDER BY person.email LIMIT 0, 200 [14Jan2006: To collect all the emails, except unsubscribers and signups who don't want email, that received mailing last year: ] SELECT DISTINCT factname , person.email, persontitle, personname FROM person, personfacts LEFT JOIN unsubscribers ON person.email = unsubscribers.email WHERE unsubscribers.email IS NULL AND mayemail = 'y' AND person.personsernum = personfacts.personsernum AND personfacts.factname IN ( 'isnodisplay', 'issupporter', 'waseventcontact', 'isarthurslist', 'isprofessor') ORDER BY personfacts.factname, person.email LIMIT 0, 7000 For a last minute mailing in 2006 to event contacts. Get contacts from remote site: SELECT DISTINCT(contact, email) FROM event WHERE event.email IS NOT NULL AND event.email LIKE '%@%' ORDER BY event.email LIMIT 0, 400 Then use the Perl mailer program to send the message. [OLD, when there was a separate 3500 professors] SELECT `profsernum` , `profname` , professor.email , `department` FROM `professor` LEFT JOIN `unsubscribers` ON professor.email=unsubscribers.email WHERE unsubscribers.email IS NULL AND `department` LIKE 'Bio%' ORDER BY 'email' LIMIT 0, 600 For displaying the person duplicates for editing: SELECT * FROM `person`, `personfacts` , `dups` WHERE person.email = dups.email AND person.personsernum = personfacts.personsernum ORDER BY 'email' LIMIT 0 , 2000 DELETE FROM `event` WHERE `eventsernum` > 348; SELECT factname, COUNT( factname ) FROM personfacts GROUP BY factname ORDER BY factname; DEVELOPMENTAL SQL WORK: 24May06: The last of the remote database personsernums is 1701, for  HYPERLINK "mailto:roberttkonig@yahoo.com"roberttkonig@yahoo.com. The lastupdated date of the first transfer from the remote to the mailing database was at 20051231192226. The first of the NEW persons has personsernum 75839 in the mailing database. 24May06: Getting signups on the remote db: SELECT person.personsernum, email, lastupdated FROM `person` WHERE person.maydisplay = 'y' OR person.maydisplay = 'n' ORDER BY person.lastupdated ; 24May06: Getting the signups from the unified mailing database into a PRE-CREATED empty table with the structure of the person table: INSERT INTO `signups` SELECT person.* FROM `person`, `personfacts` WHERE person.personsernum = personfacts.personsernum AND (personfacts.factname = 'issupporter' OR personfacts.factname = 'isnodisplay') ORDER BY person.email 25May06 Getting the one email that is "extra" in emailbase13jan: SELECT emailbase13jan.unsubscribers.* FROM emailbase13jan.unsubscribers LEFT JOIN emailbase.unsubscribers ON emailbase13jan.unsubscribers.email = emailbase.unsubscribers.email WHERE emailbase.unsubscribers.email IS NULL ; 25May06: Putting the value into where it was missing in emailbase: INSERT INTO emailbase.unsubscribers (email) VALUES ('revrosi@bostoncoop.net'); 26May06: Seeking records that are logically inconsistent in the mailing database, in which the person has a 'n' for maydisplay from a "mayemail"-only registration, and also a 'y' for maydisplay from a full Supporter registration: SELECT *, COUNT(`personsernum`) FROM `personfacts` WHERE (factname = 'issupporter' OR factname = 'isnodisplay') GROUP BY personsernum HAVING COUNT(`personsernum`) > 1 ORDER BY personsernum 26May06: How many people came over from the remote database?: SELECT rperson.* FROM `rperson` LEFT JOIN signups ON rperson.email = signups.email WHERE signups.email IS NULL ; 26May06: Getting the new records for processing by a Perl script and putting into the mailing database. This compares the email field on ALL the person records from the remote database, and the smaller set of existing registered person records in the mailing database. SELECT rperson.* FROM `rperson` LEFT JOIN signups ON rperson.email = signups.email WHERE signups.email IS NULL; 29May06: Seeking incompatible with the person information [May NOT BE THE RIGHT SEARCH]: SELECT COUNT(personfacts.personsernum),person.* FROM `personfacts`, `person` WHERE person.personsernum = personfacts.personsernum AND (factname = 'issupporter' OR factname = 'isnodisplay') GROUP BY personfacts.personsernum HAVING COUNT(personfacts.personsernum) > 1 ORDER BY personfacts.personsernum 29May Seeking records NOT to insert in mailing person table SELECT person.* FROM person, personfacts WHERE ((personfacts.factname = 'issupporter') OR (personfacts.factname = 'isnodisplay')) AND (person.personsernum = personfacts.personsernum) AND (person.personsernum > 75000) 29May06: Getting a table (set) of JUST THE person records which would cause uniqueness/key problems if ADDED TO THE MAILING person table: SELECT person.*, newperson.* FROM person, newperson WHERE person.email = newperson.email PROTOTYPE FOR LEFT JOINS: SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id WHERE table2.id IS NULL; 7Jun06: Finding all the person records who have no personfacts records: SELECT PERSON.* FROM PERSON LEFT JOIN personfacts ON PERSON.personsernum = personfacts.personsernum WHERE personfacts.personsernum IS NULL ; (A similar search can find all the personfacts records that point to a nonexistent person record.) 9Jun06: Find all the personfacts records that go with a particular personsernum: SELECT person.*, personfacts.* FROM person, personfacts WHERE person.personsernum=110 AND person.personsernum=personfacts.personsernum 12Jun06: Find any records in the mailing person table that have the same email as a remote (self-registered) person record: SELECT newperson.*, person.* FROM newperson, person WHERE newperson.email = person.email 12Jun06: trying to remove the questionable people from remote person table SELECT person . * , personfacts . * FROM `person` , personfacts WHERE person.personsernum = personfacts.personsernum AND person.personsernum >75837 AND (personfacts.factname = 'issupporter' OR personfacts.factname = 'isnodisplay') ORDER BY lastupdated, person.personsernum Are there any problem cases?: SELECT person.* , personfacts.* FROM `person` , personfacts WHERE person.personsernum = personfacts.personsernum AND person.personsernum >75837 AND NOT (personfacts.factname = 'issupporter' OR personfacts.factname = 'isnodisplay') ORDER BY lastupdated, person.personsernum SELECT person.* , personfacts.* FROM `person` , personfacts WHERE person.personsernum = personfacts.personsernum AND person.personsernum =76135 What would a DELETE remove?: SELECT personfacts.* FROM `person` , personfacts WHERE person.personsernum = personfacts.personsernum AND person.personsernum >75838 ORDER BY lastupdated, person.personsernum First delete the associated personfact records: DELETE personfacts.* FROM `person` , personfacts WHERE person.personsernum = personfacts.personsernum AND person.personsernum >75838 SELECT person.* FROM `person` WHERE person.personsernum >75838 ORDER BY lastupdated, person.personsernum Secondly, delete the person records: DELETE person FROM `person` WHERE person.personsernum >75838 Now, backing up to May 26 or thenabout, of all the records from the remote person table, which are not duplicates of persons already in the Mailing database?: SELECT rperson.* FROM `rperson`, `person` LEFT JOIN person ON rperson.email = person.email WHERE person.email IS NULL 12June06: SELECT * FROM `person`, `personfacts` WHERE (factname = 'issupporter' OR factname = 'isnodisplay') AND (person.personsernum = personfacts.personsernum) DELETE personfacts FROM personfacts, person WHERE person.email = 'uu1stomaha@aol.com' AND person.personsernum = personfacts.personsernum DELETE FROM `person` WHERE email = 'uu1stomaha@aol.com'; All the personfacts information about one person in the mailing database: SELECT `email`, personfacts.personsernum, factname, factvalue1, factvalue2 FROM `person`, `personfacts` WHERE person.email= 'ghgolter@aol.com' AND person.personsernum = personfacts.personsernum LIMIT 0, 30 Lowercase and remove leading and trailing spaces for all the emails in a table: UPDATE `person` SET email = LOWER(email); UPDATE `person` SET email = LTRIM(email); UPDATE `person` SET email = RTRIM(email); And to make sure the unsubscribers match the other names. These things (and removal of single quote and surrounding quotes) are done as part of unsubs2sql.pl processing: UPDATE `unsubscribers` SET email = LOWER(email); UPDATE `unsubscribers` SET email = LTRIM(email); UPDATE `unsubscribers` SET email = RTRIM(email); 12Dec06: And for the human names that might be surrounded by whitespace: UPDATE `person` SET personname= LTRIM(personname); UPDATE `person` SET personname= RTRIM(personname); SELECT `factvalue1`, `personname`, person.email FROM `person`,`personfacts` LEFT JOIN `unsubscribers` ON person.email=unsubscribers.email WHERE unsubscribers IS NULL ORDER BY 'person.email' LIMIT 0, 600 mailbox:/C|/Documents and Settings/User 2/Application Data/Thunderbird/Profiles/nijx0stm.default/Mail/pop.darwindaycelebration-1.org/RecentEmails If you want to disable autocommit mode for a single series of statements, you can use the START TRANSACTION statement: START TRANSACTION; SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summary=@A WHERE type=1; COMMIT; For a mailing to all the contact persons in 2005: SELECT `contact` , `email` FROM `event` WHERE SUBSTR(`eventdatetime`,1thru4.syntax.of.substr) = '2005' ORDER BY 'email' LIMIT 0 , 400 2006Nov17: All the ismedprof records for the medprofs emailing: SELECT DISTINCT person.email FROM person, personfacts LEFT JOIN unsubscribers ON person.email = unsubscribers.email WHERE unsubscribers.email IS NULL AND person.personsernum = personfacts.personsernum AND personfacts.factname IN ( 'ismedprof') ORDER BY person.email LIMIT 0, 26000 9Dec2006: All the isprofessor records for the (is)professors emailing: SELECT DISTINCT person.personname, person.email FROM person, personfacts LEFT JOIN unsubscribers ON person.email = unsubscribers.email WHERE unsubscribers.email IS NULL AND person.personsernum = personfacts.personsernum AND personfacts.factname IN ('isprofessor') ORDER BY person.email LIMIT 0, 4000 29Dec06: Arthurslist people, with the factvalues etc: SELECT DISTINCT person.personname, person.email, personfacts.* FROM person, personfacts LEFT JOIN unsubscribers ON person.email = unsubscribers.email WHERE unsubscribers.email IS NULL AND person.personsernum = personfacts.personsernum AND personfacts.factname IN ('isarthurslist') ORDER BY factvalue1, factvalue2, person.email LIMIT 0, 2000 11Jan07: How many events are registered for each year?: SELECT YEAR(eventdatetime), COUNT(`eventsernum`) FROM `event` GROUP BY YEAR(eventdatetime) ORDER BY YEAR(eventdatetime) LIMIT 0, 4000 12Jan07: How many personal signups a year? Email only and Supporters: SELECT YEAR( lastupdated ) , COUNT( email ) , maydisplay FROM `person` GROUP BY YEAR( lastupdated ) , maydisplay ORDER BY YEAR( lastupdated ) , maydisplay LIMIT 0 , 4000 25Jan'07: All the State fields used in Events table: SELECT stateprovetc , COUNT(stateprovetc) FROM `event` GROUP BY stateprovetc ORDER BY stateprovetc LIMIT 0 , 10000 31Jaqn07: Remove bungled rows: DELETE FROM `event` WHERE eventdatetime IS NULL; 7Feb'07: How many events in each country in a particular year?: SELECT countries.country, COUNT( countries.country ) FROM `event` , `countries` WHERE countries.cnumber = event.country AND `eventdatetime` LIKE '2007-%' GROUP BY `country` LIMIT 0 , 300 ; Use of Dreamweaver (DW): New human language (or propagation of ALL of NEWlang revisions to an existing language: BE CAREFUL not to overwrite (erase/obliterate/copy onto) any translated pages! When a new language is needed, on the DDC2 computer ("David's") use CTL-D to Duplicate the NEWlang directory (folder), which will create "Copy of NEWlang". Then rename the topmost "Copy of NEWlang" folder/directory to the language name. Try for a unique language name to avoid hitting the same string in some text. In particular, use englishL for English, spanishSA for SpanishSouthAmerican, AutoTrans for Automatic computer Translation, (more to be assigned). When a popup offers to check for broken links, click "Don't Update". Select the closed topmost folder with the new language name and use CTL-F to get the Find and Replace tool. Use the Find capacity on "Source Code" in the "Selected Files in Site" to find "NEWlang" (with "Match case") and Replace All with the new language special name, like englishL. Be aware that the Find and Replace tool does not find and replace FOLDER/DIRECTORY names. If there are any NEWlang-containing folders, they must be renamed manually. For instance, the new englishL folder will contain mainNEWlang.css which must be renamed to mainenglishL.css! For each language, one must assure that there is Library entries for the current-block and for the navbar (navigation bar). For the Library, open the NEWlangxxxx.lbi language file and Save As the desired language like englishLxxxx.lbi into the Library folder. Then use the Find and Replace (^F) command on the Current Document to change the internal language names in each Library file and re-Save into the new language. a CSS file specific to that language, a Template. Make a Copy of mainNEWlang.dwt and rename it to mainenglishL.dwt . Remove the attached NEWlang.css and attach the englishL.css using the Modify/Templates/, and You may need to use the Site/Advanced/Create New Cache capacity to tell DW about what you've created. Chooselang/index.html is unusual, and has its own mainchooselang.dwt template file. The chooselang/index.html file will only be changed when a new language is added (or deleted permanently). FOR CHANGING ENGLISH: Be sure that links to englishL versions are correct in (1) the default /index.html that is used by a browse to darwinday.org and by a browse to (2) the /home/index.html that was sometimes saved by long time visitors. Both should be fixed if needed to link to the englishL language version. This may be done by renaming the file mentioned above to preserve it and moving to the location discussed and changing from NEWlang to. In this case DO allow updating of links. There is a page for each language in the /Library folder that is named like NEWlangcurr.lbi . That is the block that appears on the middle home page, meant for localized and current event items. That file should only be edited following the Dreamweaver directions for Library items (that will be pulled into places that are set to have the library item). It will be used by the home page, if correctly edited. Use the Results panel of DW to see if there are unexplained broken links or orphaned files, and fix as needed. When a new language subtree is created, the chooselang/index.html file must have the new language added to the list of choices. This is only true for the final languages that the public sees. Translators' "testing trees" must NOT be publicly linked from the chooselang/index.html page. ( If this is the first time the new language tree of pages is being done, duplicate the Template/mainNEWlang.dwt template and rename all occurrences of 'NEWlang' to the new language name: With the top folder of the new sub tree selected, use the Find and Replace (of course use Match Case Finding to narrow the set of hits) to change the "mainNEWlang.dwt" references to "mainXXYZ.dwt" where XXYZ is for the new language. At the first creation, also duplicate stylesheets/mainNEWlang.css to the new language equivalent (stylesheets/mainXXYZ.css), and use Find and Replace as with the Templates. Colleagues You can select a language's topmost folder and Replace "Darwin Day Celebration" with "Darwin Day Celebration - XXYZ " to get top-of- page titling that identifies the XXYZ Language. [For the Web site creator] Create a restricted single language tree of pages for translators to work upon: Use HostRocket's CONTROL PANEL/FTP MANAGER/FTP USERS utility to create an obscure string to stand for the language while the translator is working on it. E.g. Chinese could be 'C73R8ch' (is sensitive to upper or lower case of letters). Set the CHMOD (change modes) protection bits so that the Other bits are RWX (octal 7, for Read, Write, and eXecute/search). Create an FTP user name with the same string. Test the FTP login process to verify that logging in with that name lets the translator see all the pages under his ftp name. [There is an independent file called Essential.translators.directions.doc that tells the translator how to get files, make changes, test the changes, and place the satisfactory file to be made public under the language name.] Site management for development: When working as a single worker, set the Local Host and Testing Server to the same place, and turn off the Check Out system in the Site definition settings. After developing local versions that work on one computer, use the Synchronize feature (right click on the Local View) to move all the new files from the Local machine to the Remote server. If working in a team, turn on the Check Out system, and work in a "pseudo language" (NEWlang) sub tree on the remote server. The NEWlang sub tree can be copied to replace older versions as if the pseudo version was a real language. Visualizing it as a tree, the languages are beside one another, and the pseudo language gets copied sideways to become used as the live version. For the Current Article quickies [SEE THE PROBLEMS TOWARD THE END OF THE LIST!]: Go to the home page /NEWlang/home/index.html or if another language's pages will be stable, got to its code. There is one block called currarts.html for each language. If the language of currarts has been translated, do not change it. If they have to use English, you can copy the English version to replace their currarts after you get currarts perfect in English. Find the code that has 18% src="../currarts.html" or other % at the left. Record what the previous percentage was, since that will have to be found and changed globally by methods below. This percentage tells how much space to reserve on the home page for the contents of the currart.html block. [If the home page size changes, the percentage may change.] Vary the percent, save the page, use a browser to see how it looks, as needed to make the insert look good on the Newlang home page. Use Dreamweaver's Find and Replace function over the entire Newlang folder contents to replace % src="../currarts.html" with % src="../currarts.html" wherever it occurs. This will change all the pages that have that insert. BE VERY CAREFUL! Being a single character off (even a blank space) can break the code everywhere the currarts block is used. The percentage for height will now be correct for the amount of material on the currarts.html page (because you figured out what percentage to use), everywhere the currarts.html block is going to be inserted. PROBLEMS [A group of 4 methods that were tried and didn't work for an easily varied block of new material]: The iframe material is only displayed in the context of the DDC page. If an URL in the iframe refers to another DDC page, or some kinds of external pages, the page is stuffed into the space on the DDC that has the clickable URL. For our pages, this produced a fresh pagetop with DNA and all midway down the page, and scroll bars! PROBLEM 2: The Server Side Includes, which would be great for including material just as if it were inline, either require renaming the file extension to something like .shtml (which doesn't match what browsers expect from Amanda's days and our last year's work) or might work with the "XBitHack on" setting, which doesn't seem to be on the terms that can be searched out at HR. So SSI's don't look promising. PROBLEM 3: While PHP can do includes, that would require that the pages end with the extension of .php, which would fail to match the expectations of browsers that have saved our Web site address, like in PROBLEM 2. SO, it may be necessary to have an invisible marker and a file of instructions for the special block currarts.TXT, an manually insert the included code. Yech! So do this: Search within a language subtree with CTL+F for , copy the material to be included from the FILE1 , and highlight the material to be replaced (down to ). Press CTL+V to do the replacement. PROBLEM 4: Now the URL's aren't updated to correspond to the changed tree-depth of the material! VOMIT! So one has to clean up the broken links for every internal-to-the-project link in the block of changeable material. SOLUTION: Use the Dreamweaver Libraries capacity to store and modify and insert a block of material. Now called currNEWlang.lbi for the front page. And the same Libraries capacity to hold the navbar for each language, which will vary by the size of words and characters. End of Dreamweaver concepts. Preparing HTML style emails: Wherever the original text comes from, drop it (or import it, etc.) into a MS Word 2000 text file. In the lower left corner of the document's window, click on the leftmost symbol, to get "Normal" formatting. When the document looks good, Save As "Web, Filtered" into a file that will have the .html extension. (We're assuming you have the emailer set to compose in HTML format.) Use ^A or the mouse to highlight all you want to use in the final letter. Then ^C to copy the material, and at the email Compose window for the body of the text, ^V will paste the HTML formatted material into place. Highlight the desired material and Format/Paragraph as "Body Text", which will remove excess lines. If you need interline spacing, highlight and make "Paragraph" format. Send Later gives you a chance to ask for sending as both text and HTML formatted, and then puts it into the /Local Folders/Unsent Messages file. Use the Notepad simple editor to copy most of the message into the *.textmsg document that brings together the fields of the emails file and the desired message that can be customized by the sendit.pl type Perl program. At the top of the *.textmsg file are directions for declaring the fields, organizing the message, etc. Running a routine batch of emails: With the computer on, click on the "start" button in the lower left and choose the "Command Prompt". A little black window will open, ready to accept typed commands. [If the "Command Prompt" tiny picture wasn't visible right after clicking "start", select "All Programs/Accessories/Command Prompt" to invoke the Command Prompt.] Type "cd " which will jump the place of action to the working directory/folder. Type "sendsep9.bat" or whatever the date to be sent is, all in lower case characters and with no leading zeroes in the date. That name will vary by project, but the .bat part is likely to be in common with all. That will start the pre-constructed files working away. The first email should be sent immediately by the program, to  HYPERLINK "mailto:dharris@darwinday.org"dharris@darwinday.org, and that account checked to see that the message is proper in appearance..     Printed at  DATE \@"H:MM:SS' a'M'/p'M" 2:02:01 a2/p2 (GMT) on  DATE \@"D\-MMM\-YY" 10-Feb-07 - Page  PAGE 1 of  NUMPAGE \*Arabic 17 pages -     ! ( +$&-./34;DHIJWXYbchiklstyz{|}~ýýýýýɽý h^0J h^0J h^0J h^0J h^0J h^0J h^0J h^0J h^0J h^0J h^5 h^>*h^ h^5>*h^5CJ aJ h5CJaJh^5CJaJ:jk  3 u ~ $a$Z=(O`novw*+}~4I & F ^/456CDEnfo|!W^x!!!!W"]""""һֻһһһһһһһһһһһһһһ h^5 h^0J h^0J h^0Jh^ h^0J h^0J h^0J h^0J h^0J h^0J h^0JH ^&\/=@AV)^ & F h & F ^^/ s !^!!!"""""G$H$$$$2%R%%%%&&&[' & F ^ & F h""&&~''O(n(*****.+/+2+G+Q,R,,,,,,<-R-71=1>1C1D1E1M1N1O1P1Q1U1V1]1^1_1d1e1p1q1u1v11111222 22222 h^0J h^0J h^0J h^0J h^0J h^0J h^0J h^0J h^0J jh^U h^0Jjh^Ujh^U h^5h^ h^5>*;['\'N(O(n(2+3+G+H+++,,-#-R-S-o----- ..6.D.E.w...&.....//N/i////// 0(0R0m0n000001111711111y2z2222333333344g4444555;5Y5,& R( Px 4 #\'*.25@9d Hp#&,*-T14|8<222222"2#2$2+2,2-2.2/202324252<2=2>2?2@2D2E2R2S2T2Y2Z2\2]2g2h2i2n2o2p2q2r2s2y2z223i5n5o5p5r5u5v5?7E7r799?: ;;;;; ;!;+;صh^5CJOJQJ^JaJh^CJOJQJ^JaJh^5CJaJ h^0J h^0Jh^ h^0J h^0J h^0J h^0J h^0J h^0JAY5i5u5v557r77777778888"9L9999999,& R( Px 4 #\'*.25@9d Hp#&,*-T14|8<99?: ;;;;.<k<<<<=A=t=====:>}>>>> ?=?Z????+;,;-;.;5;6;7;8;D;E;F;J;K;V;h;i;n;p;|;~;;;;;;;;;;;;.<====??@@AA>AJAKALAMAWAXAYAZAiAjAkAlA BBBBBB(B)B[BaBbBcBdBeBiBjBrBsBtBBBBBBBB h^0J h^0J5 h^0J h^0J h^0Jh^ h^0J h^0J h^0JP??F@f@q@@@@@@AAA7AyAAAA BB(B)B[BBCCC0C1CCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB1C7C8C@CACBCGCHCICQCRCSCTCUCYCZCeCfCkClCnCoCwCxC}C~CCCCCCCCޱh^0J5>* h^0J h^0J h^0J h^0J h^0J h^0Jh^ h^0J h^0J h^0J h^0J h^0JFCCCCC0DDDDDEEETErEEEE2FHFXFuFFFFGGUG{GGGCCCCCCDDD-D.DDD$F*FV?VCVDVLVMVNVOVZV[V`VaVgVhVtVuVvVwV h^0J h^0J h^0J h^0J h^0J h^0J h^0J h^0J h^0Jh^ h^0J h^0JIwVVVVVVVVVVVVVVVVVVVVVVVVVVVVWW W WWWWW&W'W3W4W7W8W>W?WKWLWMWRWSWXWYW[W\WgWhWiWoWpW}W~W4X5XXXYYYYZZ&Z,Z-Z.Z/Z0Z4Z5Z=Z>Z?Z h^0J h^0J h^0J h^0J h^0J h^0Jh^ h^0J h^0JP5XFXTXuXXXXXXYYYYYYYZZ&ZZZZZZ[K[L[T[b[[?ZLZMZNZSZTZUZ]Z^Z_Z`ZmZnZpZqZyZzZ{Z|ZZZZZZZZZZZZZZZZZZK[L[[[\\u]v]^^d_e_0`1````a/aa𸩞 h^0J h^5 h^0Jh^5OJQJ^Jh^5CJOJQJ^JaJh^CJOJQJ^JaJ h^0J h^0J h^0J h^0J h^0J h^0J h^0Jh^ h^0J h^0J7[[[\9\`\\\\\\]!]1]K][]u]v]!^8^R^i^^^^^^^_1_1_A_d_e____ `#`0`1```h?h@hEhFhHhIhMhNhOhZh[h\h]h h^0J h^0J h^0J h^0J h^0Jh^ h^0J h^0J h^0J h^0J h^0JLcccccdPdidddde3eIeWeXeeee&fIf|ffffff)g[ghghgggggghhhOiPipixiiiii]jjjjjjkfkgkmmogd{]h^h_hihjhohphrhshwhxhyhhhhhhhhhhhhhhhhhhhhhhhhhhiiiii iiiiiiii'i)i.i/i1i2i>i?iDiEiFiGiHiLiOiiiii h{0J h{0J h{0J h^0J h^0J h^0J h^0J h^0J h^0Jh^ h^0J h^0J h^0JDiiiiijjj jjjjjjjjj%j&j'j(j3j4j5j:j;jDjEjLjMjNjOjTjUjajjjjjjjjjjjjjjjjjjjkkdkұh^0J5B*ph h^0J h^0J5h^h^0J5>* h{0J h{0J h{0J h{0Jh{ h{0J h{0J h{0J h{0J h{0J h{0J h{0J7dkfkgkkkllllllnm{mmmm=nDnnnoooorrZs[sssss ttGuHuvvUwVwwwzx{x]ycyyyyyzzzz{{|||:~;~`~~=?@jk)1ȃ) h^0J>* h^0J5 h^0Jh^h^0JB*phVoooo^qq3rrrZs[sGuHuvvUwVwzx{x5yzzzz9{{{| & F ^||:~;~?@jk݃DɅK@ʉf>ލЏ & F )IUuEP7Џя Z[֖ז#$MNOde˘̘׸׸׸׸׸ץחװװhhmHnHuh*4jh*4U h^0Jjeh^Ujh^Uh^0JCJOJQJaJ h^0J5>*CJOJQJaJh^h^0J5>* h^0J5 h^0Jh^0J5>*OJQJ^J6ЏяGg 1& & F U( Px 4 #\'*.25@9$ Lt!0%(X,/37: & & F h,& R( Px 4 #\'*.25@9d Hp#&,*-T14|8<&Z[֖זXY'&1& & F U( Px 4 #\'*.25@9$ Lt!0%(X,/37:,& R( Px 4 #\'*.25@9` D l$(+(/2P69x=!"*+123489KLNOXYZ[h*4hh0JmHnHuh*40JmHnHu h^0Jjh^0JUhhmHnHuh^jh^UYZ[/1h;0/ =!"#$% DyK yK jhttp://dev.mysql.com/doc/mysql/en/timestamp-4-1.htmlDyK yK lhttp://dev.mysql.com/doc/refman/5.0/en/load-data.htmlDyK yK <mailto:roberttkonig@yahoo.comDyK yK :mailto:dharris@darwinday.org)d@d Normal$*$1$A$a$+B*CJOJPJQJ^J_HaJmH sH tHDAD Default Paragraph FontViV  Table Normal :V 44 la (k(No List DA@D Default Paragraph Font2O2 WW8Num2z0OJQJJOJ WW-Default Paragraph Font6U@!6 Hyperlink B*ph>*$O1$ syntaxdOAd &syntax_alpha syntax_alpha_reservedword\OQ\ "syntax_quote syntax_quote_backtickZOaZ !syntax_punct syntax_punct_listsepXOqX syntax_quote syntax_quote_singleZOZ !syntax_digit syntax_digit_integer`O` $syntax_alpha syntax_alpha_identifier^O^ #syntax_punct syntax_punct_qualifierdOd &syntax_alpha syntax_alpha_functionnamepOp ,syntax_punct syntax_punct_bracket_open_roundrOr -syntax_punct syntax_punct_bracket_close_round0O0 syntax_punct.)@. Page NumberBb@B HTML CodeCJOJPJQJ^JaJNO"N Heading !x$CJOJPJQJ^JaJ6B@"6 Body Text "x(/@!2( List#^JH"@BH Caption $xx $6CJ]^JaJ.OR. Index% $^Je@b HTML Preformatted7& 2( Px 4 #\'*.25@9CJOJQJ^JaJ4 @r4 Footer ' !<^@< Normal (Web) ([[jk 3u~=\0*v:0*v:0*v:0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*jk 3u~= ( O ` n o v w * + }~4I ^&\/=@AV)^/s^GH2R[\N O n 2#3#G#H###$$%#%R%S%o%%%%% &&6&D&E&w&&&&&&&''N'i'''''' (((R(m(n((((())))7))))y*z****+++++++,,g,,,,---;-Y-i-u-v--/r///////0000"1L11111111?2 3333.4k44445A5t55555:6}6666 7=7Z77777F8f8q88888899979y9999 ::(:):[::;;;0;1;;;;;;0<<<<<=E=T=r====2>H>X>u>>>>??U?{???@3@4@w@@@@AAABB5BWBmBnBBBBBCC,D=DDDD)EFE{EEEEF&F'FcFsFFFFGޅЇчGg Z[֎׎XY\000000000000000000000000000000000000000000000000000 0 00000000000000 0 0 0 0 0 0 0 0 00 0 000 0 0 0 0 0 0 00000000000 0 0 0 0 000000000000000000&0&0&0&0&0&000000000000000000000000000000000000000000000&0&0&000000000000000000000&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000&0&0&0&0000000000000000000000000000000000000000000000000000000000@0@0@0000000000000 0 0 0 0000000000000000000000000000000000 0 0 0 00 0 0 0 0 00 0  0 0 0 000&0&0&0 &0 &0 &0 &0 &0 &0 &0&0&0&0 &0&0 &0&0 &0&0 &0&00y00y00y00y00y00y00y00y00@'0y00y00 "2+;BCP:T`UwV?Za]hidk)[MQTX[]_bdefhknopsv^['.1Y59?CGFMrQ5X[1_chgo|ЏY[NPRSUVWYZ\^`acgijlmqrtuwZO"".#Q$$$;<-<#Nd[XXXX4BMcmv}!: D@  @ d@ 0011\0011\9*urn:schemas-microsoft-com:office:smarttagsplace8*urn:schemas-microsoft-com:office:smarttagsCity w|JW  6 C S \ G J   ^ NVQ\akx (5:IJ]dwho;> #mp?J_q7E)> K O T  !!K"P"""u##G$L$%!%W%c%v%%&&&&&&' '''1'='@'M'^'g'm''''''''((((((()f)o))***%***6*;*F*Q*^*f************+L+T++++++++++,,,v,,,,,,,,,,,,,---//H0R00000222233"3*3Z3g33333334,44444444444455552565?5E5X5[5s5x555555L6T6W6c6e6p6r6|66666666666677!7$7<7A7U7f7q7u777777777777x888888?9I9N9V9Z9i999999999u::::::::::::;';8;@;I;Q;Z;e;o;w;;;;;4<?<<<=0=9=D=Z=k=u====h>s>{>>>>>>>>>>>>?????@ @(@l@u@@@aIaNaaaaabb;bLbOb\bbbobbbbbcccd%d,ddddddddd=fDfff gg\gdgyggggh hNh]hhhiiiiiijjjjkkyllmmmm;nFnjoqoppqqqqqqEr`rrr!t-txuuxxy&y){1{{{{{{{}}}}~ ~*~0~3~6~V~\~_~b~(0ր܀uzJOɃ̃ل݄Іۆ/>؇dkaceoY\!( =H 0 5 f i   |NR##$$%%<&C&&&&&& '''((((((>)D)****++},,B-H-.-.//////001111?2233a4j45696:6J67%8M8V8q88I9L9::B;H;9=D===H>W>U?z?,@2@@@YAkAAA5BBBBBBBCCCC,D ,,To move newest signups (supporters and emailC2R22,8,I,'!'2888'!'8882,!,,'288,R2 2 > --!P2 >  .only) from the remote to the mailing database:282!",2R!8,,-R3!,!2!8,R28282!282',!- @ ! I ,- 2 >  -6- 2 , ---2 " ,RemoveC,N22=2 " M!e the duplicates from the remote ,2,222,,,'""2N2,!,N2,-2 " qpersons*8,,'28'-2 "   database.2,,2,', 2 " B  -.m2 ,ASelect all the fields of the persons on the remote database using,8,,,,2,!,2'2!2-2,!'22'222,!,N2,3,,2,',2'31 2   -.2  ,SELECT *8>;=C=2 2   -. 2 { ,FROM `persons`7CHY 2,!'22(! 2 {  -. 2 , -- 2 a , ---=2 ,!FOR ALL GROUPS OF PROFESIONALS E <NHHCCMHNI<8N<<HO<C8'NHHC8C 2 --!2  MAILINGS:^H'C'HM8!- @ ! ,- 2 !  -7 2 I , -6-P2 ,.METHOD 1 [Now outdated. Use Method 3 instead]:Y==HHH2"H2H222-,2H',Y,22222',-2" 2 l  -, 2 -, --)2 ,Use a SQL SELECT comH',,8I<8><=C=,3N2 0Pmand to retrieve the desired names from the REAL database on the remote machine N,222!,!,2,2,3-'!,22,N,'!"2N2,C=I;3,,2,(,222,!,N3,N,,22,2 ,m(see one example code below). Use the MySQL administrator program to Export the desired fields in .csv data !',,22,,3,N2,,22,3,2H!H',2,[08I<,2N2'!,2!2!31!,N3=322!2,2,'!,2!,2'2,'22,,p2 ,Cformat. Set Fields Terminated By tabs to '|', no enclosing of fiel!2!N,8,7,2'=-!N2,,2D0,2'222,3,2'212!!,X2 - 3ds, the other fields as their defaults. Check the 2'2,22-!!,2','2,!2-!,2'C2,,22,2 ,qbox for "Put field names at first row" if you expect to need the reminder of what the fields/columns represent. 223!2!(82!,22,N,',!!'!2I(!022,32,-22,,22,!,N22-!2!H2,2,!,2',22N2'",2!,',22 l,\Save the file on your local hard disk as "Whatever.csv", checking "Save as File" with "None"8,2,2,!,22022!2-,2,!22'2,'(_2,,2-!,'2(,2-,221(8,3,,(7,(H2(H23,(2 l  compression.,2N3!,''22 2 l -- 2 , ---2 R, The program =2,2!31!,N-#2 RKstatestocodes.pl(!2!,'!3,28,'8-2 RS will translate a column of state names (upper or lower case) into the 2 character H!,2',,,,23N22!',,2,N,'!223,"2!2H,!-,',!222,2,2,!-,,!(2 ,USPS abbreviations.mH888,22!,2,22' 2 h -- 2 8, --2 ,MTo make the insertion (loading) of data, either use programs of the style of n=2N,2,2,2',!22!3,221!3!2,,,2,!2',2!22!,N'2!2,'0,2! 2   -- 2 , --82 ,For a mailing to all the conta72!,N,312,2,-22,(2 ct persons in 2005:m,2,!'22'22222 2  --2 ,SELECT8>;=C= 2  -2  `contact` ,22,, 2 , 2 I`email`*!,N- 2 i - 2  -L2 w,FROM7CHY 2 wG -2 wa`event`* ,3,2 2 w{ - 2 w -.2 ,WHERE *_H=C=2 YEARH=HC 2 (-! 2  -2   eventdatetime,2,23,,N, 2 = - 2 V)-!2 w  = '2005'82223 2  -L2 ],ORDER HCH=C 2 ] -2 ]BYBH 2 ]" -2 ]<'email'*,N, 2 ]= -L2 ,LIMITl= [ = 2 A - 2 Z0-2 2  - 2 ,- 2  -2 400222 2 m -. 2 C, --2 ,SELECT8>;=C= 2  -2  `eventsernum` ,3,2',!22O 2  - 2  ,- 2 ' -2 @ `contact`!,22,, 2  - 2 ,- 2  -2 `email`*!,N, 2  - 2 ',- 2 @ -2 YYEARH>HC 2 j (-! 2   -2  eventdatetime,2,22,,N, 2   - 2  )-!2    2 @  -L2 ),FROM7CHY 2 )G -2 )a`event`* ,3,2 2 ){ - 2 ) -L-                    ՜.+,D՜.+,h$ hp  Darwin Day CelebrationaS '(There is also a file called Essential Titlel 8@ _PID_HLINKSA$<  mailto:dharris@darwinday.org K}mailto:roberttkonig@yahoo.com  R6http://dev.mysql.com/doc/refman/5.0/en/load-data.html VY5http://dev.mysql.com/doc/mysql/en/timestamp-4-1.html   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxz{|}~Root Entry FP֑0aQData y1TableWordDocument1SummaryInformation(04DocumentSummaryInformation8CompObjq  FMicrosoft Office Word Document MSWordDocWord.Document.89q