Half a shelf of Perl books

The new version of Intermediate Perl is in the Noisebridge library nestled up against all the other blue animal books.


Intermediate Perl is a new and expanded version of Perl Objects, References, and Modules. Its new chapters are: Using Modules, Intermediate foundations of Perl, Filehandle references, Regular expression references, and Creating your own Perl distribution. There are expanded and up to date lessons on testing and test harnesses for Perl as well as an introduction to Moose. This book, after you’ve gone through Learning Perl, should give a really good foundation for writing in object-oriented Perl.


I don’t write regularly in Perl for work any more, but went through some of the book’s chapters and exercises. They were easy to follow and well-written. Moose looks especially useful and cool.

Thanks to O’Reilly for the review copy and the nice addition to round out our languages library at Noisebridge!

We now have two copies of Learning Perl, Intermediate Perl, two versions of Programming Perl, Mastering Perl, Mastering Regular Expressions, Mastering Perl/TK, and the Perl Cookbook. We also have Wicked Cool Perl Scripts, Perl in a Nutshell, Higher-Order Perl, Object Oriented Perl, Automating System Administration with Perl, and last but not least, Win32 Perl AND Perl for Dummies. Enjoy, all you Perlmongers!

The Planet of Swears

I’m writing some RSS feed scraper programs and while playing around with that, set up an install of Planet feed reader. It was very funny to see on the one hand, lots of people blogging or writing things like “Oh, this doesn’t even need setup, just unzip it and you’re basically done” — and the Planet documentation itself saying that the config file’s comments explained everything — vs. actual step by step instructions of what to do, like burningbird‘s post, which I found very helpful. That’s a lot of “nothing to do” to explain and it still didn’t get far enough for what I’d like to figure out: how to set up one installation of Planet but also set up multiple feeds in different directories, each with their own template.

Meanwhile I’m very amused that for another project I get to write a spider with a curse word filter. I haven’t had that hilarious of results since writing porn filters for Excite’s web spider. My output files and screen output when swear-spider.py runs are very funny. “Asshole Detected!”

A quick search on lists of dirty words gets some very amusing Supreme Court hearing transcripts. Like so!

FCC v. Pacifica Foundation, 438 U.S. 726 (1978), Decided July 3, 1978. The dissenting opinions are especially great!

“A word is not a crystal, transparent and unchanged, it is the skin of a living thought and may vary greatly in color and content according to the circumstances and the time in which it is used.”

I’ll try quoting that to my kid next time he frown at my liberal use of what he carefully calls “the f word”.

Ada Lovelace Day

I felt a little wistful as I thought over who to write about. I wished for a clear mentor or hero who I would have known about from childhood onward. Not many of us had that kind of computer science hero or even a childhood or teenage computer geek peer.

I admire the many women I know (or know of) who start organizations to give community and support to women programmers and geeks. People I admire from afar in Linuxchix: Val Anita Aurora for her excellent writing, Akkana Peck because I’m always stealing bits of her .bashrc file and I admire how she posts useful tidbits like that, Sulamita Garcia, Miriam Ruiz for being a developer also outspoken about sexism and misogyny. Desi from Devchix who not only is a leader in a great organization for women but who is such a good evangelist and teacher for Ruby on Rails (almost enough to tempt me away from Python and php). Angela Byron aka webchick who is so helpful and a great teacher for being involved with Drupal, too. All the women on linuxchix, ubuntuwomen, phpwomen, devchix, and Systers: you are my heroes!

Of developers I know, well, I don’t know that many. My co-worker Kirsten aka Perlgoddess, Kaity aka ubergeekchick (uberchicgeekchick on github) who writes and podcasts so thoughtfully about development and creativity, and skud aka Kirrily Robert who is a developer, a great blogger and good friend. My co-workers at BlogHer, Julie Douglas who taught herself php and Drupal, and Skye Kilaen who works with me on blog templates and problems (can debug a legacy Moveable Type template like nobody’s business!) and who runs All Access Blogging, which gives detailed step by step information on how to make various blogging platforms accessible to people with visual impairments. And my sister Laura, who as well as being a hilarious and fierce personal blogger who can express any emotion simply from inflecting the word “dude”, inspired me through sharing her 10 years of professional experience as a web developer in SEO, and by having more O’Reilly books about HTML, CSS, Java, and Javascript than I do, enough to make California slide off into the sea, and tackling the ever-shifting landscape of web dev head on no matter how much it makes a person just want to scream. And last but not least my fellow conspirator and BFF, Laura Quilter, whose expertise I depend on, running the back end of feministsf.org server, blog, mailing lists, and wikis.

Of other techy women I have worked with I would like to say a few things about women who either worked or learned from me. I look up to them too. Jasmine Davila, Olivia Given, Lark Baum all worked with me at the University of Chicago Lab Schools, doing web stuff, tech support on about 400 classroom and office Macs, twiddling with the servers, installing the physical wiring in tiny basement network closets and crawling through the ceilings wearing our headlamps, Flukes, and walkie talkies. They were so awesome. We all learned it on the fly, without any big attitude that we had to have a big attitude. We were not always pretending omniscience in a field where the range of things to know changes daily. We approached what we had to do as stuff to learn. That still inspires me a lot! I include in this category my mom, Karen Henry, who began asking me questions about the Internet in about 1994 and who ended up teaching classes on email, gopher, databases, and the early Web as a business and science reference librarian at the Houston Public Library.

Obviously I love and admire social media leaders and thinkers like Tara Hunt, all the women of She’s Geeky and BlogHer, but there are too many to list! All my co-workers, the bloggers on our site and in our network, all the social media experts and technophiles, I am honored to get to be part of these networks of thousands of women. And to all the relentlessly intelligent bloggers I know from blogging, feminism, and science fiction fandom like Tempest, Jen Cole and Aleja Ospina, Karen Healy (Girls Read Comics) and Robyn Fleming (Cerise and The Iris Gaming Network), Strata Chalup, SJ from I, Asshole, Sarah Dopp, and Debbie Notkin, thank you for putting your words out there.

For anyone who has ever sat down with me to hack on some code or who has made any sort of public technical blog post with code in it, I feel a deep sense of sisterhood and am very, very happy to know you. It is both sad and inspiring but every woman I have ever spoken to in person about coding, even the people I think of as light years ahead of me in knowledge and experience, has expressed feeling like they are not hackery enough to really “count”. As if in every thing we do has we have to prove our perfect technical competence for the honor of all womanhood. I try to fight this feeling in myself. Let’s keep fighting it and put more of our work out there even if it’s not “good enough” or done. And let’s keep supporting each other’s work and using peer mentoring and pair programming as much as we can!

(post for Ada Lovelace Day pledge organized by Suw Charman. Thanks Suw!)

Programming languages and science fiction!

Cat Valente, Tiptree-winning author of The Orphan’s Tales, wrote up a brilliant comparison of programming languages to literary genres. She covers a lot of ground here as a cultural and critic, and she’s witty as hell. If the bits I’m quoting make you laugh, go read the whole thing!

Smalltalk is mythpunk, Python is speculative fiction, Java is…

Divorce in the suburbs, cancer of the miscarriage, and how God will punish you for having sex. That’s right, it’s the big, predictable Literary Fiction Gorilla, coming to destroy a gated community near you. Java is the mainstream of the mainstream, it gets all the critical hand jobs, they teach it at universities, and the support base is vast…

PHP is journalism, Perl is poetry, Ruby is steampunk, ASP is given a snarky kick to the head that keeps making me laugh!

It mixes all the worst parts of the other genres/languages. Hey! Serial killers are awesome! What about a vampire serial killer? What about a vampire werewolf serial killer with a heart of gold? What about a vampire werewolf serial killer with a heart of gold who mixes row result processing, business logic, and layout code ALL ON ONE PAGE??!

Sold, to your corporate overlords. After all, if you put the strength of an entire company behind it, it’ll be a success, even if it leaks memory and ends with and then I woke up.

The feel and culture (and reputation) of each programming language are well described and it takes some complicated snark to link them all to equally well described literary genres and subgenres. Geek culture is AWESOME.

I can’t imagine a more perfect post for this blog to link to! Thanks, Catherynne!

She's Geeky – Show and Tell Your Dev Env session

We had a session to talk about what tools, languages, and platforms we use for software and web development.

She's Geeky

I started off by trying to list all the tools I use for work for development. Then other people stood up one by one to add their tools to the list on the whiteboard. Lots of people had questions. Our group ranged from people who have been developers for decades to people who had been programmers, but left the field and come back again, to people who weren’t sure if they were developers at all because they do web stuff.

I felt like something came together at the end when someone said that she was leaving a huge company with the budget to buy development tools and was now going to work for a startup, so she came to She’s Geeky to figure out what free and open source tools were out there for her to use. I forgot to mention SCALE and OSCON, but I should have.

There was a core of people using unix/linux and (oddly?) Mac but unix-centric. There were some Windows folks but was unclear

Version control: People were interested in svn clients and in github. No one currently used CVS and almost no one had heard of mercurial.

Here is the giant, unorganized list of tools mentioned.

unix / linux
ichat vnc screen
git (github is nifty)
command line…
perforce version control
rails for web framework / merb
apache with passenger – for deploying rails apps locally
mongrel server to run web apps and it’s really easy. (use with rails) ruby gem
webbrick rails thing – use to be built in rails server now it’s mongrel
what is a ruby gem install?
selenium – browser based scripting
watir – testing tool – ruby
“Everything I know is ruby, I’ve tried to forget my Java life”
eclips intellij
bbedit / textmate
textmate has plugins
php, ruby, html/ css/javascript
Firebug. I love firebug. i am dead in the water without it.
firebug lite you can use on non firefox browsers.
We need a whole session on firefox plugins
Yslow, pixelperfect, firebug, web developer toolbar
enthusiastic recs for pixelperfect.
Melanie explains history of Yslow.
(Firefox accessibility checker, can’t remember its name)
subversion client: beanstalk
Versions – mac svn client!
Tortoise – windows svn client beautiful interface that makes sense.
frameworks: jquery uses css format for javascript and it is awesome
Django (python)
Apptana. IDE. mixed feelings. baby aspirin flavor of eclipse. painful horribly slow but love the real time syntax checker
vmware fusion. really cool for multiple dev for mac. it can be a little slow. My mac is 2GHz processor 2GB memory but it’s almost not enough any more to run the VM
Amazon ec2
Apache comes with your Mac, just turn it on in the preferences.
jslint. douglas crawford’s book Javascript: the good parts (unison from room)
he wrote jslint, javascript interpreter.
Wireshark – monitor your network
adobe cs3 design packages, fun! flash dev. get student discount. adobe 4 is out!
instant rails for windows.
hivelogic.com help installing mysql on a mac.
IRC: use irc for the tool/language. Colloquy – good irc client for Mac (no one used it on Windows)
basecamp, campfire. Propane.
Scrummy – open source good for task tracking, agile
pivotal tracker – a useful communication tool. tracking stories. move through dev cycle. it’s free.
Drupal firefox plugin!!! must have this! helps with debugging!
Kindle – good for tech manuals
The Public Library. good for tech manuals too.
westciv stylemaster css editor westciv.com
coda panic software Transmit ftp client. integrated web dev env called Coda which is really fascinating.
Apple trainers doing technical mac os books. they use subetha edit.
omnigraffle mindmeister
different open apis that are super useful.
cpan, darwinports, apt-get, easyinstall, etc etc

* Desi Mcadam – ruby, ruby on rails, web based applications, spotus, hashracket , consultant. florida. Devchix!
* Karen Mcadams – Freelancer. Likes to work for non profits.
* Jenny Greenwood – jobs dev drupal software engineer C, C++, assembly. out of developtment for 8 or 9 years. teaching self CMSes and drupal and css and php
* Margaret rosas – quiddities , santa cruz – doing drupal. knight foundation. drupal radio. Radio Engage. local public radio station she built Santa Cruz Geeks site. met heathervescent and started doing santa cruz geek dinners.
* becca (berkeleybecca) peachpit press. what software tools we have energy around. ones we just love. she is lurking here to find out what we love. she is proud of coding her personal web site and taught herself css.
* Laura – – front end middle end web dev for 10 years. not working now, volunteering to do web sites. does bazarre bizarre. javascript, java, html css.
* nabil project manager. security. peeve of security. personal information in web sites! finds out horrible details! company is hiring, little consultancy, sf, biz process mgmt development, hiring microsoft engineer, a software developer. elegrity. elegant + integrity.
* Amie Forest – Quiddities
* Terri Train IT manager. web dev typing in html javascript by hand, dreamweaver, i like it by hand better elegant code. lotus domino. not free. good quick app development tool for doing all sorts of workflow , web forms, apps on the web. switching to a new company, come to this come to new company with fresh ideas, won’t have money to buy expensive tools, looking for free ware now.
* melanie archer – front end web developer javascript css freelancer.

I was taking notes very fast and might have left out people or crucial details – please correct me in comments (or email!)

A lot of us also agreed it would be nice to put up a board to match up people who use various of these tools or platforms or languages, so that we can have an IM buddy, where it might be easier to ask questions rather than go on IRC. I do try to nerve myself to ask stuff on IRC … and thank you to anyone on php-women and drupal-support who helped me out 😎 I found that pretty quickly I was able to be helpful to random other people in drupal-support, which made me feel easier in my mind about asking my own questions.

Thank you everybody! I got a lot of good tips from this session and also a nice sense of not being alone in trying to get a handle on the amorphous beast that is a development environment.

We agreed that we could pick any of these tools or concepts and do an entire sesson on it that is more in depth and hands on. general agreement that we need a Firefox plugins for developers session, asap.

Cleaning up urls with awk

Here’s my stupid awk trick of the day: using the field separator option to mess with URLs. I spent something like an hour trying to write regular expressions and then reading other people’s solutions to cleaning up urls from log files and other sources.

For example, given a list of about a million urls like this:


I want to end up with a list that’s just


You can do this in php with some regular expressions:

preg_match("/^(http:\/\/)?([^\/]+)/i", $URLstring, $result);
$domain = $result[2];

(Though I saw a lot of other solutions that were much longer and more involved)
or, here’s one method in Perl:

$url =~ s!^https?://(?:www\.)?!!i;
$url =~ s!/.*!!;
$url =~ s/[\?\#\:].*//;

But for some reason I was trying to do it in one line in awk, because that’s how my brain is working these days, and I couldn’t get the regular expression right.

Suddenly I realized that if I split the lines on “/”, the domain name would always be the third field.


awk -F"/" '{print $3}' hugelistofurls.txt > cleanlist.txt

gave me a nicer list of urls.


awk -F"/" '{print $1,"//",$3} hugelistofurls.txt | sort | uniq -c | sort -nr > counted-sorted-cleanlist.txt

gave me just about what I wanted.

After I did that and finished squeaking with happiness and wishing I could show someone who would care (which unfortunately I couldn’t which is why I’m blogging it now) I realized I wanted the www stuff taken out. So I backed up and did it in two steps,

awk -F"/" '{print $1,"//",$3}' hugelistofurls.txt > cleanlistofurls.txt
awk -F"www." '{print $1 $2}' cleanlistofurls.txt | sort | uniq -c | sort -nr > reallyclean-sorted-listofurls.txt

which gave me something like this:

3 http://blogggggggy.com
2 http://yetanotherblogomigod.blogspot.com

Exactly what I wanted!

While I appreciate a nice regular expression and it can be a fun challenge to figure them out, getting the job done with awk felt a lot simpler, and I’m more likely to remember how to do it in an off-the-cuff way, next time I have a giant list of urls to wrestle with.

How would you approach this same problem, either in awk or using another tool or language? Do you think one way or another is superior, and why?

Upgrading Drupal 4.7 to 5.14

I have been working on upgrading a site from Drupal 4.7, which is unsupported, to Drupal 5.14. I am somewhat familiar with Drupal as a blogger, user, and administrator, but wasn’t sure what it would take to upgrade a large and complicated site that’s been around for several years (and several former admins and programmers).

I decided to copy the entire site over to my computer so that I could run and upgrade it on a machine I completely control. I had already installed MAMP. If you develop on a Mac I advise you not to be snobby, MAMP is awesome.

The instructions at drupal.org looked pretty good. And Angela Byron from Lullabot has a good screencast on upgrading from Drupal 4.7 to 5.1x. If you are about do an upgrade, I recommend you watch this — it helped me get all the steps clear in my mind and it was also kind of reassuring.

One of the first things I did was to list out all the modules used in the old site. Later, I dumped them into a shared document so I could ask other people which modules they know are used or might be useful to bring to the upgraded site. I also started a plain text log file of what I was doing for the upgrade, to record things that worked and didn’t, links that were useful, commands, and so on. This sort of “work in progress” file gets messy very fast, so it’s good to go back over it before you stop working for the day to sum up what actually did, or does, work!

I started off here, Copying a site to a local MAMP installation on a Mac. I ran into a few problems and when I figured them out, I logged in to drupal.org so I could add to the documentation.

Then I ran into problems, because I wanted to run several instances of Drupal at once, and there were hard-coded bits of urls in several blocks of the 4.7 site. So I had a copy of the complete 4.7 site in a directory called “drupal”. Its .htaccess file was set up as in the “Copying a site to a local installation” instructions suggested. But half the links were broken – the ones that were hand-coded into blocks rather than pulling from the database. What I ended up with was another .htaccess file in the root MAMP/htdocs directory:

RewriteEngine on

RewriteRule ^$ /drupal/index.php?q=/ [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /drupal/index.php?q=$1 [L,QSA]

This worked. Now I have several folders with different versions of Drupal and several sites in my MAMP/htdocs folder, and to get them fully operational with all the links working, I change the path in the RewriteRule in .htaccess in htdocs.

Other people, in dealing with this problem, turn to virtual hosts, which is what we use in our production server. I haven’t tried setting that up yet, though it seems like once it was working, it would be more elegant.

Onward to the upgrade itself. I tried it a few times, and kept getting various bits wrong, ending up with a blank white screen and no information in the MAMP/conf/apache_error_log and nothing at all in “view source”. HEre’s some of the things I did wrong the first few times:

– ran upgrade.php from the old site’s directory. oops! Drop that database and start over!

– put the old site into maintenance mode, then couldn’t get to a login screen for turning maintenance mode off again, despite advice from the Drupal forums on “Site off-line under maintenance mode” to go to


. I ended up turning off maintenance mode from the command line,

/Applications/MAMP/Library/bin/mysql -u root -p databasename
>> update drupal.variable set site_offline=1

That worked great.

Turning things on and off from the mysql command line turned out to be very helpful for a bunch of my problems. It was useful for manipulating themes. When I enabled the site’s old 4.7 custom theme — not even selecting it as the default theme, just enabling it — my entire new install gave me a blank white screen. Oblomovka suggested switching the directories around, which seemed like a great idea! So,

mv oldcustomtheme screwedupoldcustomtheme
cp bluemarine oldcustomtheme

We both thought this was clever and would trick Drupal 5.14 into going right back to the default bluemarine theme. No! It didn’t work! The white screen persisted.

This was helpful: Unusable theme – How To reset your theme via the database.

In retrospect, I should not have tried enabling the old custom theme before I turned on some more modules; when I actually bothered to look at the old theme, I could see it used jstools and all sorts of other stuff that I’d deactivated.

I’m off to try that now. So far this has been pretty interesting, though sometimes frustrating! The documentation on drupal.org is extremely helpful.

Growing a Language

I watched Guy Steele’s 1998 talk Growing a Language last night. At the opening description and definition of “man” and “woman” I bristled up and wondered for quite some time if there would be a point to opening with gender or if it was just a throwaway joke about women and personhood. I tried to have faith something interesting was going on; luckily this faith was justified. Keep watching! (Or read the transcript if you’re impatient.)

I think you know what a man is. A woman is more or less like a man, but not of the same sex. (This may seem like a strange thing for me to start with, but soon you will see why.)
Next, I shall say that a person is a woman or a man (young or old).
To keep things short, when I say “he” I mean “he or she,” and when I say “his” I mean “his or her.”
A machine is a thing that can do a task with no help, or not much help, from a person.

As I listened to Steele’s use of language I became more and more hyperaware of words and their grammatical elements. This awareness built up slowly and had a great effect. I especially admired some of the poetic & beautiful bits in the middle:

But users will not now with glad cries glom on to a language that gives them no more than what Scheme or Pascal gave them. They need to paint bits, lines, and boxes on the screen in hues bright and wild; they need to talk to printers and servers through the net; they need to load code on the fly; they need their programs to work with other code they don’t trust; they need to run code in many threads and on many machines; they need to deal with text and sayings in all the world’s languages. A small programming language just won’t cut it.

How interesting that he could not begin to talk about anything, without defining gender! It’s partly chance and the fact that he’s using English; in Spanish for example he would have to take another approach to arrive at “person”.

Lost my mind in PHP

The last few days I went a little nuts thinking about PHP and rewriting a very horrible messy script. I’d write something, make it work, write a little more, break the first bit, go back to look at the first bit and find that I couldn’t understand my own code that I’d written the day before. I ended up throwing it out completely, waking up the next morning and writing the entire thing in a nice, neat, correct way. Within a day and a half, it worked, and is readable. The most important things that improved this sad blob of pointy-looking things and regular expressions were:

– decent formatting, without slacking off! Equal sign in vim, you’re my pal.

– abstract things out into functions. Do it twice? think about making it a function.

– But don’t always, if it’s going to make a simple thing confusing. Keep it clear!

– Name the functions logically.

– Really think about naming variables so that the code makes sense when you read it.

I struggled with understanding what the hell I was doing in the first script because, I swear, everything was named $tag and $another_tag and $taglist and $tagfeed[] and $tag->tag until I was lost in a maze of taggy little passages, all alike. How very, very embarrassing! If you ever see that code, please burn it!

Now all the variables have very logical names so that everything makes sense. Doing that made me understand what I was actually trying to do — much better than I had understood it before. Everything became clear and fell into place.

The php.net pages are truly awesome. I did struggle for silly amounts of time trying to figure out what the hell to do with strings. Like do I want egrep, preg_match, substr, strstr, or WHAT? (I usually end up with preg_match since I know perl regular expressions reasonably well.) But I appreciated php.net/function pages very much. The explanations make sense, there are examples, the lists of related functions often lead me to stuff I want to know, and the comments by other users *completely rock*.

Meanwhile, I read PHP Sucks, But It Doesn’t Matter on codinghorror.com, and the entire crazy comment thread that is half computer science “real programmer” snobs, half even realer programmers rolling their eyes, and half people who know they are the 3rd half and who are Microsoft types (in other words, weird aliens from other universe). All I can say if any of these guys calls me a “script kiddie” I will enjoy kicking their teeth in!

Bike? I don’t need your bike! I can kick your ass with these here training wheels! Snobs.

My thingamajig now reads tags in from de.licio.us, parses them, decides what kind of thing they are, pulls out different kinds of posts, and builds lists of post titles by subject grouping and source in a somewhat complicated way. Then it writes all those lists out to a jillion little static files which will be cached… everything will be so much faster and more polite to the delicious servers this way. Joy!

De.licio.us API and SimpleXML

I spent some time today looking at the de.licio.us API and writing bits of php with SimpleXML. Both of them are very easy and clear to use. I tried a bunch of the examples in the de.licio.us api docs to think through what it was possible to do with the queries. I really like de.licio.us, and hope it… well, hope that it stays pure. It’s so nice and clean, it makes sense, it’s not all crapped up with junk all over the page or the interface. Maybe a little more since the redesign, but it was fairly restrained.

This article by Matt Biddulph shows how to do some interesting stuff with de.licio.us data using Python, libxml2, tagsoup, and the Redland RDF toolkit. Backing Up Delicious with PHP, mySQL, SimpleXML, and Ajax also looked like fun to try. That was all way too fancy for what I needed to do today, but I’m keeping it in mind for future tool-building or experimenting with my personal del.icio.us account.

I had an annoying and frustrating interlude of realizing I needed to download xcode onto my new hard drive, downloading it for like 2 hours, going off in the meantime to 2 other machines I have accounts on to see if I could do what I wanted there while waiting for xcode, doing half of it (had php5, did not have other stuff I needed!), realizing slowly that I was in an endless labyrinth of nowhere quite having all the tools or access that I needed, and going back to my laptop in disgust. Also, I’m on a Mac and out of sync with the several different linux servers I have accounts on, so am always switching environments and remembering things that need to be tweaked.

I wonder how much time other people spend fiddling with their development environment? Or having to set it all up again after some crash or computer loss? I’ve noticed that even the holiest sounding super-experienced people who act like they’re perfect about these things still spend a good amount of time saying “Oh, wait…” as they flail around, hit dead ends, and so on. That makes me feel a bit better about what happened today, when my stupid xcode download finally finished, wouldn’t install, puzzled me for another frustrating 20 minutes until I realized my laptop was running an older operating system than it was before my HD crash. Ran around looking for CDs to upgrade. Failed to find them. Dammit! Downloaded older version of xcode. Now everything works! Tomorrow I will make the php all nice and make it do what I want… then stuff it all into a Drupal module.