Saturday, July 28, 2007

Indexing the Sky

Indexing the Sky
SETI may be the Search for ExtraTerrestrial Indexes.

Rectangle classes in python

This will be useful for mapping applications.. assuming it works well. I keep hoping to find time to build something with Google maps and Python people data. Maybe this will help.

Sunday, July 15, 2007

If it looks like a Duck, it may be a Parrot..

Last Saturday (July 15), the DFW Pythoneers gathered together to hear wise words from Patrick Michaud. "Lo", he said, "it is not an ex-parrot (though it may be pining for the fjords.." and we listened in solemnity.

PM gave us another great talk and explained why Perl 6 is important/interesting/intriguing to Python people and how we can get pizza paid for by the Perl foundation while looking at Python.

Parrot is the VM for the upcoming Perl6. It also happens to be capable of 'running' Python (and a bunch of other languages, some of which you will wish you had never heard of if I told you about them so I won't. You're welcome) and Patrick gave us a run-down on how the Python sourcefile in all of its beauty gets transformed into bytecode for Parrot. It's less than simple so you can go ook it up yourself at parrotcode.org.

After the meeting, I checked out the latest Parrot code and tried the test suite. Yay, it worked (good start) and then I tried the command line prompt for the Python part of Parrot, pynie. It also worked but things got a little bumpy after that:
  • longs appear to be broken but aren't
  • floats are broken, along with imaginary numbers
  • list, arrays and dictionaries are less than working
It's a work in progress and I am not sure how to fix the BNF grammar that's written in Perl6 Regex syntax so sent Patrick an email and called it a night.

Sunday, July 8, 2007

Django Flat Pages are cool

Turn your ever-growing linear website into a Django website with all that leading edge buzzword goodness!

I have been helping a friend with a website and it, like Topsy, just growed. It went from being manageably small (not too many pages) to large enough to be a problem (too many pages). Think it doesn't sound so bad? Imagine having to fix the copyright date on each page. That's not a good example because I was careful to use a standard layout.

Obviously the solution is to use templates but I didn't want to edit the content and add the template on my machine and upload everything so I wanted server-side templating (as opposed to rendering the pages client-side and uploading them, like they do for python.org).

My preference is to use Python for, well, just about any reason and then it hit me! Use Django! Or aanother framework, after all there are 80+ at the last count. But use Django! It's sexy! The voices in my head finally convinced me and I sketched my requirements:

I wanted
  1. really straight-forward templating
  2. WYSIWYG editing in the browser so the client can fix the content (if they want)
  3. access control (so bad people don't do bad things)
  4. a well-explained system with a user-base
  5. ease of implementation and support (this should have been nearer the top of the list)
  6. Simple urls, somehow mirroring existing URLs. Don't want to edit lots of pages.
The voices seemed to be right! Use Django! But how to do number 2? Using flatpages we can get a plain text version of WSIWYG but that's not I had in mind. I cast about and found TinyMCE (not hard to find, really, it's everywhere and for good reason) which is a small javascript-based editor that can beconfigured to be about as compicated as you want. Followed a recipe on the Django website and, presto chango! Nice looking WSIWYG!

After I fixed the problem where TinyMCE decided to rewrite URLs (wanted to leave that to Apache to solve number 6), it was all uphill to the finish line. Apache rewrites most URLs to send them to django, except for the fixed asset stuff (like CSS, images, forms for download etc).

What I may do, for a giggle, is have Django write a copy of the rendered page to the filesystem and server all content as static. Hm.. maybe not. What might be good is to version the pages - add a post-save so that we keep some amount of history.