Wednesday, January 28, 2009

Strangeness on Planet Plone

I submitted that my Plone tagged blog posts be added to Planet Plone months ago. Maybe a year ago. Today it seems that I have been accepted to the blogroll.

Unfortunately Planet Plone is slurping up all my posts in one big go, and they do not seem to be in order. My guess is that their is a synch issue between what blogspot and Planet Plone uses as the update field in RSS. Don't you just love specifications used as guidelines?

Anyway, I'm sorry about the confusion. It will be over soon.

Starting a new Plone project in February

I'm excited because I've yet to do a Plone 3 project from scratch. This is another internal NASA effort, one that Plone is literally designed to fit almost out of the box. We'll change the skin and add a few add on products.

Some of the specific things I want to explore are:
  • Using a simple architecture to represent data cleanly. All my previous Plone work has been with systems with very complex data architectures, so complex that I realize now that most of the special content types were not need.
  • AJAX via KSS to make things just more fun, and in a functional way.
  • Integrating a couple NASA internal products that I have written.
  • Plone 3 Style Portlets! I know they are hard to set up, but I really like their concept.
  • Having my co-worker Malik show us how good his design skills are.
  • A chance to create some custom forms using z3c.form. After playing with the hackish nature of zope.formlib (IMHO) and the clean implementation of the Django formlib, I want to be able to compare and contrast.
I will also be keeping my toes in NASA Science's major upcoming release (more details on that later) and our "top-secret" project (more to come). So next month promises to be even more crazy busy than this one.

US Pycon 2009 registration is open!

Register here:

Information (rates etc.):

Hotel information & reservations:

Early bird registration ends February 21, so don't delay!

-- David Goodger, PyCon 2009 Chair

Sunday, January 25, 2009

Awesome Mac command-line trick of the day

From the command line:
echo "blah" | pbcopy
Which copies 'blah' into your clipboard. Courtesy of Philipp von Weitershausen.

Sunday, January 18, 2009

Second Annual President's Day Sprint

We did this two years ago at Chris Shenton's place, where we sprinted on a Plone application. Last year we skipped it. This year we are doing it again. We being myself and perhaps Alex Clark, Katie Cunningham, Chris Shenton, and a few other locals to the DC area - essentially members of ZPUG-DC. Perhaps we can get non-locals in on it too! You can do whatever you want.

Originally I hoped to meet in a single, central location, but its clear that getting anywhere the day before the inauguration is not going to happen. So instead we are going to find local places that serve coffee and do our work there. Hopefully we'll gather in groups to provide moral support. Katie Cunningham plans to do it in a Vienna, VA Cosi's - so if you are in Northern Virginia, consider joining us there!

Things I plan to do:
  1. Work on simplegraph. I plan to finish my forms integration to make it easier for end users. If that happens quickly then I'll add in capability to have more than one form.
  2. Work on pinax. I want to finish doing a code merge.
What about you? Well, you can sprint on anything you want. Core python, Plone, Zope, Django, Pinax, PHP, whatever. Odds are we'll be spread out over the DC metropolitan area so I'm thinking we will have a central IRC channel entitled #sprintdc2009.

See you tomorrow!

Wednesday, January 14, 2009

How to do well at the job

This isn't just for technical folks, it is for everyone. It is amazing how frequently we forget these things.

Don't be a jerk.
  • Your co-workers are not medical interns. Treat them with respect, not scorn.
  • Don't play unnecessary games of technical semantics.
  • When someone comes to you with a question be happy they trust you enough to ask you the question. If they have trouble communicating their question, help them out.
  • Trying to actively sabotage a boss/colleague/subordinate's job is a stupidly dangerous game to play.
  • Handle the successes of others publicly. Handle the mistakes of others privately.
  • Appreciate your system administrators and engineering staff. They only get notice when things blow up, and when the chips are down they are the people who will save your behind.
  • Never turn down a project without asking for at least a day to think about it.
Be Seen.
  • Everyone should be in IRC/Chat at all times they are working. Otherwise we think you are not.
  • If you lead/manage a project you have to be seen. Telecommuting is acceptable one day a week. Two days is pushing it. Three days is too much. If you can't pull off a physical presence then don't lead projects.
  • If you meet the customer, dress up.
Meet your deadlines early.
  • You'll have time for the issues that always turn up.
  • You'll have time to look into other things.
Go the extra mile when it is just a yard.
  • A little bit of interpretation can keep customers really happy.
  • Too many people try to follow requirements to the absolute letter, fearing that they'll get some scope creep if they don't.
  • A tiny and shiny bit of UI you toss in is what the customer tends to notice to the exclusion of all the other work you did.
Stay out of the closet.
  • Never get blocked into the coder's closet. If you do Python, some some time exploring Zope, Django, Twisted, SciPy, libxml, pygame, and other things. Same goes for Java, .Net, and the rest of the programming world.
  • Follow the main technical blogs for your favorite tools. See where trends are going.

Monday, January 12, 2009

Simplegraph Screen Capture

Checkout a screen capture of simplegraph!

The skin is courtesy of

django-uni-form lives!

Django Uni-Form is my answer to a problem with the Django forms API in that they do not play so well in the arena of the disability access. The default view uses tables which is not disabled friendly. Other views build forms as paragraphs or lists, neither which is optimal for attractive display of HTML forms.

My answer was to create the application above. It incorporates the wonderful uni-form css and javascript combination to create disability-friendly yet attractive forms. Turn off JavaScript, CSS styles, or access it from a mobile phone and these forms should still work. Which is critical in my job. Best of all, you don't have to touch much HTML at all.

I tried to make it as Django generic as I could, but as a Django newbie it is probably a bit rough around the edges. The code, if you examine it, is really clean. I like that about Django efforts - there is no boilerplate!

Anyway, after a bit of setup, you do an easy modification of the form templates that are presenting your Django forms. You should also style it a bit to match your preferences.

Some final notes and comparisons:
  1. Time to get a basic version running was about 45 minutes.
  2. Time to get the styling working was about 1 hour (mostly a stupid mistake on my part).
  3. I'm hoping the Pinax project will incorporate my efforts! ;)
  4. The Django docs were very clear on everything I needed to do. I did not have to leave to accomplish my chosen task. I cannot stress enough that this is something I really enjoy about Django.
  5. This was fun and easy.

Edit on 7/15/2010: Changed the link to django-uni-form on github.

Friday, January 9, 2009

Python formatting test

def my_function(text):
print text
return text.lower()

Monday, January 5, 2009

How to globally ignore .pyc files

This has been driving me nuts. Sure, I run svn propset on directories and do so recursively, but I've hated having to remember to do it. Well, I just did it globally! How? I found my subversion config file!
emacs ~/.subversion/config
global-ignores = *.pyc
Yeah! No more annoying .pyc!

Useful python code for blogspot users like me

The big grief I have with blogspot is that it does not give you an easy way to display code, especially when it comes to XML. Well, that is now accounted for thanks to a handy script by the notable Davide Muzzarelli.

So instead of this (view the source to see the XML instead of just numbers):


You get this:

<total-fat units="g">65</total-fat>
<saturated-fat units="g">20</saturated-fat>
<cholesterol units="mg">300</cholesterol>
<sodium units="mg">2400</sodium>
<carb units="g">300</carb>
<fiber units="g">25</fiber>
<protein units="g">50</protein>

Thank you so much Davide!!!