Since you didn't mention it

Amazon said the Django book has shipped and should be here on Dec 11th.

p.s. Hello Jen's dad!


That Which Is Not Dead


Usenet is still dead however. Sad really, given how much of my life I spent in the care and feeding of news servers.


Django Bookie - Confusion and Delay?

As a follow-up to my last post I present Amazon's new delivery status on the Django book.

Ta ta for now.


Django Bookie

My delivery widget, the fantastic Delivery Status, tells me that Amazon will have the Django book in my hands in two days. Color me skeptical. No, I mean more than usual, smart guy!


pythonic powncer

Oh hai!

I'm in ur pownce, given away ur invites. You wants?



TheSecret ThisService

I love ThisService because it lets me "script" MacOS X using the command line. It allows you to take any script and turn it into a MacOS X service. Scripts that take standard input make the most interesting services in my opinion. In any application, you select the text you want as input to your script, press the keystroke you've assigned for your service, and your script is invoked with the selected text as its input. Combine that with a python script using the webbrowser module like I have and prepare to triple your productivity(*).

(*) May also result in nuclear meltdowns.


Pshop Image Limited

I have this one task at "work" that I did using Photoshop. It's simple and requires the same few steps to be performed each time I do it. I may do it a few times a week at most, but each time I did I wished I wasn't doing it by hand. I thought "I know! I'll learn Photoshop scripting. It's just javascript..."

But I put it off since I was already busy not learning Django...

Then the other day I realized I could just do it in Python using the Python Imaging Library. A few minutes later and it was done.


from PIL import Image
import sys

src = sys.argv[1]
dst = 'output.jpg'
orig = Image.open(src)
thumb = orig.resize((450,321))
new = Image.new('RGB', (1500,1500))
for j in range(5):
for i in range(5):
new.paste(thumb, (j*450,i*321))

Thanks to my friend, the Python Challenge, for making me spend so much time with dear old PIL back in the day.


Ruby has the lead

In baby names that is.

I'm reading the newsletter from our favorite birth center and they always list the names of the babies born there in the past few months. This time I noticed three babies named Ruby (two born on the same day!) but none are named Python. No Guidos either.


Django Boogie - part 1

I found a Django based application that I'm interested in checking out, but I'm a complete Django newbie. Let's change that. Please?

Today I started learning how to use Django from the free online beta version of the forthcoming Django Book. After I installed Python 2.4.4 (because it had working readline support) on my Mac, I set up Django from SVN. I worked my way through the first three chapters which went very smoothly. I've learned enough for the day to feel very satisfied, and I may come back for more later.

One thing that Django does very well is its debug mode error pages. I saw more of those then I probably should have. ;-)



bits of tids

It's been over a year since I left my university job to work in the family business. Best year ever!

The Subway (rest in peace) based web application I started there lives on and continues to be improved. If anyone wants the Subway framework's source, drop me a line. I may say yes. *wink*

Some python nuggets from this year:

The 0.12 snapshot of elinks, a full featured text based web browser, has a new python scripting back end. The code was contributed by my friend the poultrygeist.

Also from the poultrygeist comes this python oddity:

>>> raise ()
Traceback (most recent call last):
File "", line 1, in ?
TypeError: exceptions must be classes, instances, or strings (deprecated), not tuple


>>> raise (IndexError, "ha")
Traceback (most recent call last):
File "", line 1, in ?
>>> raise ((KeyError, SyntaxError), IndexError)
Traceback (most recent call last):
File "", line 1, in ?

Sure looks like exceptions can be tuples, even nested tuples. Odd.


Plone: Adding Roles to Groups

I'm a complete Plone/Zope newbie. Let's keep it that way. Please?

If only I had seen this first:

Plone FAQ: How do I add a Role?

Here's a slightly more detailed how-to:

  1. At top level of your site's Zope Management Interface (ZMI), create the new Role in Security tab.

  2. Also in the same level of the ZMI, edit /acl_users/portal_role_manager by adding the new role (and make sure the name matches from step 1!)

  3. In Plone's site setup : Users and Groups Administration : Groups, you'll now be able to assign the new Role to a group.

That's it!