Thursday, December 31, 2009

Resolutions for 2010

Since I start my decades at zero, that means we have just 4.5 hours left in this first 10% of the 21st century. And with just 4.5 hours left, I post my New Year's Resolutions.
  • Sell the house, pay off the remainders of my debts, and get my own place to stay. And get a car too.
  • Travel to another country.
  • Take my son to another country.
  • Drop the waist size 2 inches and not break any bones.
  • Go to an amusement park, visit the beach, and also see a part of the USA I've never been.
  • Do more educational work for Python related technologies, and that includes getting the Django Education Foundation really rolling forwards.
  • Throw away at least half my current stuff. I don't have much stuff now, and I want even less. Also, If I don't use or interact with any one of my non-book remaining possessions by 2011, I'm throwing it away.
  • Move my blog to my own system and blog at least once a week.
  • Get a mountain bike and have reasons to use it.
  • Get back into Eskrima, focus more on BJJ, get into Capoeira.
  • Hire a maid. I'm not messy, but I want someone to do the fine tuning of my place.
  • Go to Pycon, DjangoCon, and a new conference.
  • Have a beer with Thomas, Andy, Andy, Tony, Garrick, Bernd, and the rest of Ye Aulde Gange.

Tuesday, December 29, 2009

There was a day...

... just a few years back I got in trouble for getting trac/svn for a critical project I was leading. I had myself, two developers, a project manager, business analyst, and a manager best described as the quintessential pointy haired boss. Our company thought at that point that version control and web based ticketing was crazy, edgy, dangerous stuff. Nope, tickets were to be controlled by sharing Excel spreadsheets and zip was how you handled version control.

I'm glad those days are gone.

Monday, December 28, 2009

New Year's Python meme

Tarek Ziade blogged this first. I'm just following the herd cause thats what a lone wolf does...

1. What's the coolest Python application, framework, or library you have discovered in 2009?

Django and Pinax. Technically I discovered those in 2006 and 2008 respectively, but it wasn't until 2009 that I got to really dig in. Django was really a blast from the outset of 2009, but it was about five lines of code that made me realize this was the framework to follow. Pinax is like a magical function decorator for Django, what more can I say?

Sphinx rocks too. I don't use it enough!

2. What new programming technique did you learn in 2009?

Thanks to James Tauber I really got into JQuery. Thanks to Brian Rosner I really got into Git as a DVCS. Yeah, I know YUI and HG are part of things too, but my dark secret is that part of why I really dig JQuery and Git so much is the guys who got me started on those tools.

3. What's the name of the open source project you contributed the most in 2009? What did you do?

Its a toss-up between Django Uni-Form and Pinax.

Django Uni-Form is my first successful open source project and about 75% of the code is mine, plus all the documentation and most of the marketing. Speaking of which, every NASA Django project (except for one) uses Django Uni-Form. Its in use by Discovery Channel, PBS, Washington Post, Washington Times, Richmond Times, and more. Of course, it wouldn't be anywhere near the success it is without the contributions of nearly a dozen people.

For Pinax I haven't done as much of the code as I wanted in 2009. Personal life issues swallowed up a lot of my time and energy, but I certainly evangelized and documented and taught it nearly every day. Pinax is not just me, its James Tauber, Brian Rosner, Jannis Leidal, and the rest of the Pinax and Django communities.

4. What was the Python blog or website you read the most in 2009?

Twitter. Certainly there are blogs I really enjoy following, but twitter is where it was at in 2009 for me. I read every blog it seems on Planet Python and Django, but my favorites include (in alphabetical order) Alex Gaynor, Chris McDonough, Jacob Kaplan-Moss, Jesse Noller, and Tarek Ziade.

5. What are the top three things you want to learn in 2010?

Driving cars.
How to cook again.
Much more Capoeira.
Something really nifty in Python I don't know yet.
How to count to three.

Sunday, December 27, 2009

2009 resolution summary

Items that are crossed out are completed.
  • Compete in tournaments and/or races
  • Refinance the house
  • Go to yet another country
  • Learn Django, JQuery, and get better at zc.buildout and CSS
  • Stay with NASA another year
  • Test for my 3rd degree black belt in Tae Kwon Do
  • Not break any bones
  • Fix up more rooms in the basement
  • Take down that one tree in the backyard
  • Enjoy my family more (Things are better with my parents, siblings, and perhaps my son).
  • Go to PyCon, Plone Conference 2009, and DjangoCon
  • Become much more active in the open source community

Recap of 2009

This has been an interesting year. Incredible life changes have meant I've gone between screaming excitement to the doldrums of depression.

The good:
  • Made an amazing number of new friends this year. In alphabetical order I can think of Alex, Barbara, Brian, Chris, Eric, Jacob, James, Jannis, Jeff, Jesse, Mike, Niall, Rich, Shawn, Steve, Zain and others I'm certainly forgetting to my undying shame. Thanks for your support and also thanks for opening my eyes to what the world can be really like!
  • Got involved in the Python, Django, and Pinax communities, reviewed talks for Pycon, became a Pinax core developer, started up NOVA-Django, started up the still nascent Django Education Foundation.
  • Worked another year in Python related technologies.
  • Tested for my third degree black belt in Tae Kwon Do. Worked my Muay Thai. Got better at Brazilian Jiu-Jitsu. Learned a little Capoeria.
  • Almost up to 6 years without a broken bone!!!
  • Stayed with NASA, for five years total now. Saw good people hired like Chris Adams and Tom Rando. My team set up a collaboration space. Launched a big internal Pinax powered application called SMD Spacebook and am helping on a major outreach application.
  • Began my new side consulting efforts which will be mostly educational based. I like teaching anything, from martial arts to technology! Worked on a course for Holdenweb, and am teaching a long tutorial at Pycon!
  • Reconnected with some old High School and Middle School friends. Am able to give one of them some business.
  • My son turned 18.
  • Grew a goatee.
  • Kept teaching martial arts.
  • Got a new road bike.
The bad:
  • My marriage of 12+ years fell apart. I've lived in a lot of places since, but none of them my own.
  • Participated in a well done project that lost out to a mediocre project that won because of resource attrition and refusal of customer to effectively market the effort.
  • Didn't push hard enough to prep my house for sale until December. Going into more debt to finance the work.
  • Didn't really practice much Eskrima all year.
  • Lost a cat named Ao-Chan to kidney disease on Obama's Inauguration day. She was an aloof, regal, agile beauty who deigned to give us lots of love and affection.

Thursday, November 12, 2009

Reconnecting

Yeah, this isn't technical, but it is still a post!

I remember the first time I met a best friend. I was four years old. I saw another boy obviously my age walking on his tip-toes. Maybe he was trying to be taller. His nick-name was Scooter, and to this day I've got no idea as to what his name was. It was in his house that I remember seeing men on the moon live. I was five when I moved away. I saw him a few times but we grew apart. Eventually we lost touch.

I was six years old and just starting first grade when I met John. I think his last name was Oplenger. We became inseparable and I remember navigating my way across a mile to find his house. That was back in the 1970s when kids did that sort of thing. We made stop-animation super 8 films together. I was eight when I moved away but we stayed in touch for several years. Eventually our interests grew apart and we lost touch. I might have seen him a few times in my late teenage years, but I didn't have the guts to go up and talk to him.

We moved as I turned 16 so I switched high schools at the end of my sophomore year. I left the people I knew behind. I lost touch real fast with most of the people I knew back then. Thanks to Facebook I've reconnected with a few. Yet I wonder what ever happened to Mark, Steve, David, Jack, Donald, Katy, and many others.

After my aimless college years I drifted uselessly for a while. I lost touch with people I knew in my second high school and college. In 2000 thanks to Google and the now wretched classmates.com I started to reconnect with those old friends.

During my aimless college years I met a smart, pretty girl named Christine. She was the one I should have dated. Ha. The follies of youth.

I'm sure over time I'll find everyone I knew. I'm delighted to find these people and to see how their lives worked out. That even the craziest of us have turned into responsible parents seems like destiny. In return, no one seems surprised by how my life has turned out.

But the ones I really miss are the ones whose names I can't quite recall, or whose names are so generic that finding them seems impossible. People like Scooter, John, Christine, and others.

19 more posts to go!

Wednesday, November 11, 2009

Picking a Django powered CMS

Note as of October 2011


The CMS options have changed greatly since I wrote this blog post in 2009. I might write a more current post. In the meantime, instead of FeinCMS, use Django CMS, Mezzanine, or use the CMS grid on Django Packages to make your own decision.

Back to the old blog post...


A few months ago I asked the community to help us (NASA SMD) pick a Django powered CMS.

The response of the community was awesome. We were provided a decent sized list of CMS candidates to evaluate. We got a lot of responses, both in comments on my blog, twitter messages, and even direct emails. We compiled the list and got to work.

Now it was time for evaluation. As much as I wanted to do it myself, this was given to the capable hands of my co-worker, Chris Adams. I was a bit jealous because I like to explore, but that's how it worked out.

First Chris used a process of elimination to weed out the ones that were unusable based on my published requirements:
  • Was it actually open source?
  • Was it 508 compliant or easy to make so?
  • Runs on PostGreSQL and MySQL?
  • Is there an active community?
That narrowed things down a bit. Now Chris added some more filters:
  • Could you show pages nested inside of pages? In order words, could you rely on Tree Traversal for display of content?
  • Was there documentation? In English?
That reduced things to an even smaller list. Chris took the revised list of candidates, downloaded the code, and started them up. During this process he removed candidates that required patching to get working at the most basic level. He also looked at the code and made a few judgments there as well.

Day by day it was a sad to see the list get smaller and smaller. Each project was the labor of many hours by talented people who cared about their work. Yet Chris had a job to do, and while he didn't drop candidates easily, he did drop them.

Chris now added our sample content to each surviving candidate and invited the rest of the team to look at the code and the results. It was now up to our subjective evaluation. Two finalists stood out as winners, FeinCMS and Django CMS 2. They were so close that one might consider the results to be a tie. Both met all our needs, their code bases smelled pretty nice, documentation felt complete, code had test coverage, and the community active. They even shared a lot of the same dependencies!

The call was very close but in the end we picked FeinCMS.

Django CMS 2 was a very, very close second. I cannot say that enough.

In a few months we'll announce the front facing site we are building. We'll contribute the work we can to the open source community, which will either be work done on FeinCMS or stand alone applications.

Finally, I want to make clear the amount of effort and clarity of work Chris Adams put into these evaluations. He did the hard work and he did it well.

20 more posts to go!

Tuesday, November 10, 2009

Python Wars

Python Wars Solo was the result of a few hours effort roughly duplicating a text-based Star Trek game I wrote back in 1980-1981. I wrote the game in Apple ][ basic, and it had you 'fly' the USS Enterprise against up to nine Klingon ships. You could fire phasers, launch photon torpedoes, take evasive actions, and it seemed pretty fun. Beating one was a piece of cake. Three was a fun challenge. Five was tough. Seven was done only a few times. Nine was never done. The game was simple, fast, easy to learn, and tons of fun. Back in High School it was one of the games traded on floppy disks during the computer club so I considered it a success.

Back in 2007 I decided to try and reconstruct the software. One thing I did was was write most of it in one quick code dash of near stupidity. My theory was that it would more closely match the feel of my efforts as as 15 year old wrestling with Apple ][ basic without the benefits of a manual.

Some changes from the original:

* Rather than name it after the Star Trek universe, I named it a bit generically.
* Switched from phasers to a spinal mount weapon like what they used so wonderfully in Babylon 5.
* Changed from photon torpedoes to missiles.

The result worked, and was fun to play in dribs and drabs. The code is embarrassing, but that was kind of the point.

http://code.google.com/p/python-wars/wiki/PythonWarsSolo1

Do a svn checkout (svn checkout http://python-wars.googlecode.com/svn/trunk/ python-wars-read-only), and then python go.py. Don't laugh too hard!

I'm toying with moving this this over to Github and even doing a formal release. That would be really funny.

21 more posts to go!

Monday, November 9, 2009

Code I'll reuse

When I'm evaluating a package to use in my work or play I tend to look at five things. I think many of my on-line colleagues look at a similar list. If its missing too many of these things then odds are I'll go somewhere else for my needs or roll my own.

Documentation
Did the author bother with a README file? How about some sphinx documentation? How complete it it? Does it get me started and give a few basic examples?

I'm okay with typos and mistakes. These happen. But I want to see

Licensing
Everyone has their own idea of what they like for licenses. I like the MIT/BSD thing. I can understand the attraction to LGPL and GPL although they aren't for me. What I can't stand and won't use are monstrosities like GPL/Commercial used by such libraries as ExtJs.

Want to make money off your software? Easy... let anyone use it and charge for support. Worked damn well for communities and companies like Python, Django, Plone, various Linux distributions (Redhat anyone?), etc...

Eggification
Is your software constructed so that it can be installed via easy_install or pip? And yes, this is a bit of mild embarrassment for me, so I'm happy enough to eggify other people's work.

Tests
Do you have tests? Even a nearly empty tests file or folder? How about a test application? If you have no tests then your package is suspect. How do I know it will work independently of your personal computer?

Code Quality
Does the code smell bad? Can it be easily extended? If its innovative but the code needs work is it on a DVCS so more people can easily contribute?

22 more posts to go!

Sunday, November 8, 2009

What I love about Python

A ways back I wrote about eight things I don't like about python. I'm in a good mood today so I'm writing about what I love about python.

Typing
Let's imagine I have long, blond hair and am named Goldilocks.
Goldilocks tried the first language and everything was rigid and method overloading was painful. Too static!

Goldilocks tried the second language and everything was too loose and crazy. Evaluators could fool you into thinking different types equaled each other, causing many false positives. Too loose!

Goldilocks tried the third language and it had some rigidity but not too much. Method overloading was so easy you did it without thinking. Evaluation gotchas were non-existent. Wonderfully dynamic and strong!
Everything is an object

To be honest, most of the time we don't care that everything is an object. We just code. However, when it counts, it just makes life so wonderful.

Intelligently named built-in functions and keywords

The functions like help(), print, list(), file(), dict(), and most other things are named elegantly and simply. Print is obvious; put, say, or echo are not.

Um... so maybe dir() and zip() are not very clear.

Whitespace
I love proper indentation. When I look at other people's code in other languages, first thing I do is start fixing their indentation issues. Python makes that so much easier for me.

Competing web frameworks

When I was first playing with Python I heard people gripe that the volume of web frameworks in Python is a bad thing. I wasn't so sure then and now I completely disagree. Competition is a good thing, and friendly competition is even better. Otherwise things go stale and the community suffers.

Python's web framework designers tend to get along really well. While the community leaned this way I believe that Mark Ramm has been instrumental in keeping things friendly.

The Community
Most of the time the python community is the best. They are open minded, smart, willing to learn, and willing to teach. And no one makes too much fun of my gushing man-crush on Guido.

23 more posts to go!

Eating your own dogfood

Since way back in 2007 when I blogged about JSON and Python I've used blogspot as my blog engine. I've never been completely happy with it because it didn't easily support code coloration. Still, it worked, had great up time, and I got used to it.

Recently though on twitter I've been getting a few dings about using python to host my blog. And since I've now captured pydanny.com and pydanny.net it makes even more sense. I toyed a few times with writing my own blog engine but while I've done it for my job, I never wanted to do it for myself.

So I've been shopping around for what I consider the best blog engine for me. I had a lot of great options thanks to a blog engine query asked in April. In the end we just extended the Pinax blog engine with a few widgets and that was good enough. Anyway, recently I started to look at those again as viable options.

However, one more option presented itself. Kevin Fricovsky's Mingus. It has everything I want in a blog, and also seems to closely follow what I would like to think I would have done in my blog. That is, to say, he fetched bits and pieces from all over the Django ecosphere and assembled them into one universal whole. Yup, I like it a lot.

So my plan is over the next week or so is to set it up on a Webfaction account and start blogging from there.

24 more posts to go! (I'm behind on days but plan to make it up with posts)

Thursday, November 5, 2009

Foxpro

In the 1990s I was working for a small company doing a mix of help desk support, system administration, and development. I hated the help desk work, didn't like navigating Windows for system administration, but liked development. Even though development was Foxpro.

Yup, Foxpro. All of my Foxpro work was on Foxpro 2.6 for DOS. A few people in the office were working with Visual Foxpro 5 and 6, which meant a Visual Basic style IDE and whatever object model Foxpro adopted. But I was working in the DOS shell and that seemed easier. At the time I thought a fancy IDE was better, and wasn't until around 2003 that I changed my mind on that subject.

So anyway Foxpro was on the decrease even back in the 1990s. It took a bit of work and some luck to get out of the Foxpro closet. Fortunately I made it out. Yet I still have a soft spot for the language and too. My guess is that it is merely nostalgia for a different time in my life, and if I actually looked at Foxpro I would feel ill.

25 more days to go!

Wednesday, November 4, 2009

Crashing is fun

When we code we should be catching specific errors. Non-specific errors that you don't anticipate should be recorded in logs and hopefully researched. In theory, eventually you'll catch every error, right?

Today I was cycling along the Custis trail in Arlington, Virginia going around 22-23 miles an hour. Two cyclists were ahead of me and going much, much slower. As I came up to them I called out 'on your left' because on Virginia trails you always pass in the left lane. One of the cyclists then turned into the left lane. The other cyclist stayed in their lane.

Crap.

I hit my brakes but knew I couldn't slow down in time. On the left was a concrete sound barrier. On the right was a ditch several feet deep. So I went to the right. As my front wheel went off the path I unclipped my shoes and leapt off into the air. I'm not sure how fast I was going at that point so I'll say 18 miles an hour.

For decades I've practiced tumbling and falling down on various surfaces. The concept is that you'll get thrown, tripped, swept, or simply stumble and preparing for it is like catching the exception that is your own body when you lose control of your center of balance.

So when it came time for me to fall about 6 feet at about 18 miles an hour I was prepared. What could have been painful ended up being an awesome bit of fun that shocked the hell out of some other cyclists behind me. I rolled out of the fall and jumped up laughing.

My exception handling worked!

26 more posts to go!

Tuesday, November 3, 2009

Pycon talks and tutorials

At the Pycon in February 2010 myself and James Tauber will be presenting both a half-day tutorial on Pinax and a 30 minute Pinax tutorial. I'm delighted, honored, and admittedly a bit scared. Not scared enough that I won't be able to function, but scared enough to stay edgy. I've given talks and presentations before, but never before such a group of people that I respect and admire. The short tutorial I've done, although it is changing (and for the better). The long tutorial will be a lot of work, but we've got four months to finish our preparations.

Besides our Pinax stuff, there will be a lot of really incredible material at this conference. In fact, the times I will be working at this conference, I fear something will be scheduled that will be the talk of a lifetime. Indeed, there were a few times I hoped our Pinax proposals would be discarded because so many of the Pycon proposals were just unbelievably awesome.

On that note, I want to thank the other members of the pycon-pc group who contributed their hard work and time to figuring out which talks would be presented. Dozens of people reviewed the presented material using the Pycon website (note: these reviews will be made accessible to the authors of the proposed talks). By my unscientific count at least 2 dozen participated in the IRC meetings to determine who made the final list.

Quick Pycon Talk workflow
  1. Talks reviewed on pycon site. Talks with at least one champion got moved to next stage. Talks without champions but no negative votes also got moved to next stage.
  2. IRC discussions on each talk. Champions argued for the talks. If champion not available on IRC someone else would champion the talk. Brandon Rhodes and Doug Hellmann did a fantastic job as substitute champions. Yay/Nay votes then counted for simple majority.
  3. When we had too many talks we used a Pycon Thunderdome method of whittling things down. Three-to-five talks of similiar bent were listed together then each person named the ones they wanted to keep. The ones with least votes were removed.
Some serious stars in the process were: Jesse Noller who busted serious hiney as chairman, Doug Napoleone provided incredibly responsive technical support for the site, plus Doug Hellmann and Brandon Rhodes for amazing levels of participation. So many others I respect were there in the web reviews or IRC that it was like a python geek fanboy's fantasy. What was also wonderful was how the reviewers would vote for, and often champion, for things that competed with their own pet project. This sense of keeping alive friendly competition was wonderful and demonstrated the solidarity of the Python community.

Some of us had talks in the system. We all left the meetings during those times. If a talk didn't make it through, there were no hard feelings. We just crossed our fingers and hoped for the best. Some people who participated quite a lot had their talks canned, so favorites certainly were not played.

Unfortunately, some talks did not make the cut that I think would have been outstanding contributions. There were times I felt real disappointment when something did not make it through. Unfortunately, as much as I believe the people in the pycon-pc meetings should follow my every whim, they do not.

Some were suggested to be resubmitted as tutorials. Any talk that did not make it through should be submitted as a poster session. Heck, if your talk got refused you can always present it in the open hallway track!

27 more posts to go!

Update:
Doug Napoleone corrected me in that we only make the reviews public to the specific talk authors.

Monday, November 2, 2009

November Django Lunch Meetup was fun!

We had about 20 djangonauts show up at the PBS Crystal City building. The majority were from NASA SMD and PBS, but we also had people from the Washington Post and some other places. The conference room was just the right size to fit us, and the PBS facility looked great.

It was at the lunch that I announced that NOVA-Django is the new name for this group. NOVA-DUG just wasn't explicitly Django enough. Also, we switched from google groups to meetup.com. The reason is that google groups lacks an RSVP feature and secondarily because of the current status of spam on google groups.

For the first presentation, Chris Adams presented on the results of our NASA SMD CMS bake off. He went through the options he explored and some questions his research raised. He invited everyone to discuss his findings. Since CMS work is part and parcel of the modern web developer efforts, this talk was really appreciated.

Next I got Shawn Rider to present on the PBS Django app called activity stream. It was an impromptu talk but he gave it quite well. He did hit a snag with his demo, but that is what you get when the lunch organizer springs this on you at the last minute.

Our next luncheon will happen most likely the first monday of December. I need to work out with Shawn Rider when then will be. Until then, we'll have an evening meetup around Ballston, which will hopefully be arranged shortly.

One more thing, for our next luncheon meeting we'll also be incorporating an optional fee to go with your RSVP. That way we can arrange for food and drinks.

28 more posts to go!

Sunday, November 1, 2009

Posting every day this month

It is customary amongst some to post something on your blog every day of November. There is at least one site for this sort of thing (http://www.nablopomo.com). I think I'm going to try out this strange custom. So that means between now and November 30th each day will see some new content added to this blog.

If you are doing the same thing (blogging each day this month), let me know and I'll link to your blog from here.

So here is to 29 more blog entries!

Friday, October 9, 2009

Sys Admins: What your Developers want you to know

This is my response to Katie Cunningham's post telling Developers what System Administrators want you to know.

Of course, this is mostly for shops with large groups such as our own. But some of this applies anywhere.

Publish your damned system specifications

If rackspace, webfaction, and the rest of the web hosting world does it for $10/month, then why can't well-paid system administrators do it?

Alas, I've yet to go to a shop where I could find on a wiki page or an otherwise easily accessible document an exact specification of the target production environment. Invariably you have to ask in person, go to another department, ask managers, or go searching through word documents. Word documents?!?

Unnacceptable.

As a developer I should be able to pull up for each server a consistently formatted web page that lists the operating system, operating system specifications, patches, database(s), compilers, shell, disk space, languages, hosted applications, and anything else you as a system administrator can think of adding. If your organization doesn't support a wiki or anything like that, then consider sending out a weekly email. Something as simple as this:
  • Production01 (prod.mycompany.com): RHEL Linux, Python 2.4.4, 2.6.1, Java 1.6, Ports Open: 80, 443
  • Staging02 (staging.mycompany.com): RHEL Linux, Python 2.4.3, 2.6.3, Java 1.6, Ports Open: 80
Look - discrepancies between servers! What a surprise! Glad this is documented!

Based off of this we can build our development environments to match production environments. The QA group can also build their staging environments to match as well. Also, we might be able to better exploit a service you are providing for us rather than writing something from scratch, which means we end up saving time, energy, and money. Everybody wins!

Communication is king

A system administrator needs to be accessible via phone. It just kills me that in some shops their phone numbers are only accessible via their boss. So if you have a problem and that boss is not around the rest of us are plain screwed. Can't our boss have the system administration contact information? Or maybe even us lowly developers?

Also, squirting off emails that you are starting/finishing things is really useful. Or send an email every 30-60 minutes with status. Or jump on IRC/IM and let the very tense developer/QA/business teams know you are still working.

Stick to the schedule

When you have 15 people waiting on you, start the deployment on time. Besides the simple expense of keeping that many people on the clock, delaying a start on people who have already been there for 8 hours is a good way to earn developer/QA/management enmity. Then you'll wonder why they always blame you right off the bat.

Follow the deployment instructions

When it comes to deployment, the hard truth is that your job as a system administrator is to follow instructions. Don't improvise. If the developer instructions don't work (for example, changing to a non-existent directory), don't fix the problem right then and there by opening files and twiddling stuff. Instead, it's time to call this a failed deployment.

That might make you look bad in the short run. Developers might howl. Sometimes you just have to stand firm. A good way to address this issue is to ask to look at a project's deployment instructions before the deployment date. Which brings us to the next point...

Review the deployment instructions early

Smart developers run their deployment instructions early past a system administrator. Take a good hard look at what they are trying to do and let them know if they are doing anything wrong. Good developers will really appreciate what you are doing for them.

Clone the production environment daily

Its 2009. Shouldn't we have fresh staging servers every morning for continuous integration? Yes, I know that when you built server X it matched server Y, but that was 6 months ago. Things have changed on both servers. A smart system administrator can script this out, or so they always tell me...

Communication is king II

So the deployment had problems. Or maybe it didn't. Maybe you had to do a tiny tweak on the instructions to turn an understandable developer mistake into a shining success. Here is what you can do to help defend yourself when things go wrong and to provide developers with a window into what you are doing.

Share the bash session history by use of the Tee command, the logs, and everything else. Without us asking for it! Dump the data and make it easy for us to find. We'll appreciate it and so will you.

Wednesday, October 7, 2009

Have you signed up for the Django Master Class?

Django chief maintainer Jacob Kaplan-Moss is teaching a master level Django class in the Washington, DC area (actually in Springfield, VA) this October 16th.

Jacob Kaplan-Moss is one of the chief maintainers (BDFL) of the Django project. Besides being a technical guru and good teacher, Jacob is a great guy. Approachable, funny, and taught me about anchovies.

Django Master Class

Lets go over some of the hidden perks that the class description does not provide:
  • Even if you know Django already and have memorized the documentation you are sure to pick up some choice bits! BDFL FTW!
  • Ask questions at any time!
  • Provided 8 a.m. breakfast (so get there early!)
  • Provided Lunch
  • Dinner afterward with lots of fun local Django/Python people including Steve Holden
  • Accessible by metro, bus, and car
  • Lots of cheap hotels to stay at nearby so you get good sleep before and after class.

I'm signed up. Are you?

Wednesday, September 30, 2009

Djangonaut Lunch in Crystal City

Django and Python developers from NASA and PBS will be gathering along with various Django/Python friends for lunch this Friday (October 2, 2009) in Crystal City, Virginia. We should also have representation from the Python Software Foundation. Join us for an afternoon meal to discuss Django, Python, local collaboration, and various other community activities.

Details are as follows:

Time:
Friday, October 2, 2009 at 1:00 PM
Restaurant:
Kora restaurant | bar | lounge
571-431-7090
2250-B Crystal Drive
Arlington, VA 22202
Reservations were made in the name of Katie Cunningham.

If you intend to come, please let us know in the comments.

Tuesday, September 29, 2009

Something I learned at DjangoCon

That is me in the blue shirt doing Capoeira! The other videos aren't as good as this one. Of course, in general I look pretty sloppy - something I will have to fix!

I found what might be a pretty good place in DC for doing Capoeira, the aptly named Capoeira DC. I'm really thinking of getting into this, at least on Saturday afternoons.

Django brought me to Capoeira. Another reason for the world to use Django!

Monday, September 21, 2009

Looking for work?

Looks like we are hiring again! Who are we? We are contractors for NASA's Science Mission Directorate! We are looking for Django developers or experienced Python developers who want to learn Django to come and help us do awesome stuff for NASA. Experience with CSS, JavaScript, Subversion, Linux, and experience with contributing to open source projects are definite pluses.

Before you apply you need to pass this little test of mine. If you fail any portion of this test we won't consider hiring you.
  1. Are you a U.S Citizen? Yes, there are brilliant non-U.S. Citizens we really want to hire but according to the unchangeable rules we can't hire them. No exceptions. You need to be a U.S. Citizen.
  2. Can you get to the office? You need to be able to get into Crystal City, Arlington, Virginia every day of the work week. No telecommuters!
  3. Do you know Python? Sorry, but we aren't looking for Foxpro developers.
  4. Are you a developer? I will throw away anything from a recruiter.
  5. Can you send your resume to my email address?
The email address you need to send it to can be generated by running these two lines of code:
numbers = [100, 97, 110, 105, 101, 108, 46, 103, 114, 101, 101, 110, 102, 101, 108, 100, 45, 49, 64, 110, 97, 115, 97, 46, 103, 111, 118]

''.join([chr(x) for x in numbers])

Sunday, September 20, 2009

Pycon talk thoughts

Back at the start of this month I posted my thoughts about sessions I was considering giving at Pycon 2010. They ones I've killed are:
  • How to suffer through SOAP web services using Python even though REST is so much better (I might be too bitter for this one).
The general response to this one has been that SOAP is icky. I think SOAP is icky. Why should I present on a topic I loathe and I'm mildly bitter about? So I'm not going to do this presentation.
  • Why I like stupid template languages (expanding on a tangent of this article).
I think this might make for a good NOVA-DUG talk or a blog rant but I don't think it would work for a pycon talk. So we'll consider it nixed.
  • Lets move widgets into HTML templates and out of python code! Modern JavaScript libraries makes this easy!
I think this design pattern makes for a good NOVA-DUG talk or a blog post. Not enough for a pycon talk.
The one I submitted to Pycon:
I've already submitted this to Pycon. It went well enough at DjangoCon and we've already made changes to things so its just plain better.
The one I'm considering:
  • Why and how to make accessible508 compliant AJAXified python applications.
Actually, this one is interesting. The focus would be on things and focus on 508/accessibility issues and degradable AJAX. I would explain why 508/accessibility is important. I would demonstrate how to construct an examples using several python frameworks (Django, TurboGears, and repoze.BFG come to mind) and maybe more than one JavaScript framework (JQuery, YUI, et al).
I could certainly give that talk in 30 or 45 minutes. My concern though is just plain getting ready for the talk. It would be a lot of work in research of unfamiliar frameworks and just plain coming up with working material. Add to that selling of the house, work on a professional side project, running NOVA-DUG, working a full time job, my normal teaching schedule, leading the Django Education Foundation forward, maybe starting up Capoeira, and maybe doing some things for the Django Software Foundation, and I'm not seeing it in my schedule.

One more thing: at Pycon I want to learn! I'm not sure I want to be involved in giving too many talks since those will eat precious listening time.

I think what I will do for now cook this up as a Django + JQuery + 508 presentation for NOVA-DUG and see where it takes me.

Friday, September 18, 2009

Slides from DjangoCon 2009

James Tauber and I presented a tutorial at DjangoCon. The presentation well until a gaff near the end. We are changing things a bit and presenting this again at Pycon (if we are accepted). My slides are up!

http://www.slideshare.net/pydanny/pinax-tutorial-090909


Bonus points to anyone who identifies the mistakes in the slides.

Wednesday, September 16, 2009

Pycon talk proposal reminder

If you want to present a talk at Pycon 2010, you've got a mere fourteen days to make a proposal. Hurry up and get cracking on what you want to present before its too late. And remember, the more proposals we get the better Pycon will be!

More importantly, if you get your proposal accepted then you earn major Python community street creditability. Recruiters will smash down your door in the middle of the night in the hopes of interviewing you. You'll be followed by groupies and a posse of yes-men (and women). And Alex Gaynor will be your friend.

Show me your open source Django CMS

Want your open source CMS to be tried out by NASA SMD?

Django comes from the CMS world, and rolling your own isn't that hard. Nevertheless, we don't want to reinvent the wheel, so this is a solicitation for open source Django CMS efforts with active communities.

Our requirements:
  • Must be powered by Django.
  • Most be open source.
  • Follows Django/Python best practices.
  • Must be extensible.
  • Elegant user interface.
  • Renders humanely in FF, Safari, and IE 7, and 8. IE6 is a definite plus.
  • Section 508 compliant or at least pretty close.
  • No patching of Django to make things work.
  • Must be able to run with PostgreSQL and MySQL.
  • Must have an active community. Which means that commits to the CMS need to have happened within the last two months.
  • You must provide a featured sites list to be even considered as an option.
Make your entries in the comments to this blog. If we pick your tool we'll give you full credit for your hard work.

Thursday, September 10, 2009

Best DjangoCon 2009 Day Ever!

This might sound a bit familiar, but yesterday was a day I don't think I will ever be able to top again. It was one of the pinnacles of my geeky existence, and I fear that the rest of my life will be a dull effort to recapture the glory that was yesterday. Why do I think this is so?
  • Fresh Oregon state blueberry pancakes for breakfast with James Tauber, Brian Rosner, and Jannis Leidel. If you know me well, you'll understand why the pancakes were so important.
  • Great keynote speech by Ian Bicking.
  • I gave my first Django and Pinax related talk in a single combined event. Me and James Tauber gave a Pinax Tutorial that besides a demo gaff at the end went very well.
  • Saw a really good talk by my new Public Broadcasting System (PBS) friends! Those guys are really smart and I'm delighted they are in my home area.
  • I participated in my first conference panel ever! We (me, Katie Cunningham, Gary Wilson, Shawn Rider, and our host Brian Luft) told our story with getting Django (and python) into our shops. Lots of great questions at the end.
  • Finding out that my 508 form project django-uni-form isn't just used by NASA and Pinax, but also by PBS!
  • Chocolate peanut butter filled cookies for afternoon snack.
  • Got a chance to tell Chris Wanstrath not only how much I appreciated that github kept me from having to learn all the git functions besides the basic ones, but also fended off the inevitable person accosting him about github performance issues (I fully recognize that scaling complex dynamic sites can be hard).
  • The weather was amazing with a nice second trip to Powells. We should move the conference outside.
  • Fondue for dinner that was so good it shut down James Bennett for 2 minutes!
  • I witnessed my fellow NASA Dangonaut from Ames Research Center, Mark Friedenbach (NAI, NLSI) get married to his lovely fiance, Ariel Lee. Pictures to follow soon!
Best. DjangoCon. Day. Ever.

I'll say right now that yesterday tied my 'Best Pycon 2009 Day'. I'm delighted I got something just as good as that wonderful day in the same year.

By the way, watching Mark and Ariel get married was much, much better than Zed Shaw kicking me in the nuts.

Friday, September 4, 2009

See you at DjangoCon!

I'm off to the Pacific Northwest, specifically Portland, Oregon for DjangoCon. I'll be presenting a tutorial with James Tauber and participating in two panels. This sort of event is always a lot of work, study, and networking. I won't have much time to go sightseeing because this is a working trip, but I'm sure to squeeze in a little bit.

Portland is a very green city, has great food, and is famous for cycling. I'm sure I can find something to do!

Thanks to everyone who had a hand in me getting there or is holding down the fort back home. The quick list would be in alphabetical order:
Thanks everyone!

Wednesday, September 2, 2009

I want to give a class or talk at Pycon 2010

For Pycon 2010, classes/tutorials would be pretty easy are easy to cook up. I can think of two I can do, right after each other:
The first class gets you started with Django core bits and pieces. The second would show you Pinax and what things you can do with it.

The problem is that I'm not sure what to do when it comes to talks. Current ideas:
  • A reprise of our upcoming Pinax tutorial at DjangoCon
  • How to suffer through SOAP web services using Python even though REST is so much better (I might be too bitter for this one).
  • Why I like stupid template languages (expanding on a tangent of this article).
  • Lets move widgets into HTML templates and out of python code! Modern JavaScript libraries makes this easy!
  • Using JQuery + Django to make 508/WAC compliant AJAX applications
Thoughts? Suggestions?

Wednesday, August 19, 2009

NOVA-DUG August 19th summary

People were already there at 7:24 pm when I showed up at the Nature Conservatory lobby. They kept filtering in until 8 pm. We had another three new people show up - and all the regulars. I want to thank everyone who came, and Eric Coffman for hosting us yet again.

Some notes:
  • We introduced ourselves several times. How does one handle this when each person showing up is awesome and you want everyone to know each other throughout the meet up?
  • I did my two stock Django presentations. I need to not only touch them up and extend them, but practice them more. Thanks to the next bullet I was a bit flustered when I presented.
  • Yup, I was star struck by the presence of Steve Holden. Its funny how I can easily deal with large numbers of people but my fan boy nature screws me over when someone like a python rock star enters the room. Steve was down-to-earth though, and did an ad-hoc presentation on testing that impressed the heck out of me.
  • If Steve flusters me, what happens if I have to ever have to present with Guido in the room?!? I am Guido's biggest fan...
  • As a group, we talked about testing, wonders of django, pitfalls of django, virtualenv, and many other things. I think one presentation a night and more general talking might be good.
  • Johnny Dobbins of Media General showed up. They are in the midst of converting many newspaper and media sites to Django/Pinax from various other systems. He said once they converted everything over they would be releasing some of their code as open source.
  • Afterwards we sat outside and had drinks. We talked the state of python in the DC community and what could be done to enhance it. More on that to come!
What comes next:
  • Meet on August 30th for a Northern Virginia day of coding Pinax!
  • Meet two weeks from today on September 2, 2009 at the Nature Conservancy.

Friday, August 14, 2009

NOVA-DUG meeting notice for August 19th

Wednesday, August 19th, we are planning to get together from 7:30-9:00
pm at the Nature Conservatory building in Arlington, VA.

Location
The Nature Conservancy
4245 North Fairfax Drive
Arlington, VA 22203

Agenda

  • Meet and greet!
  • PHP-to-Django by Eric Hoffman
  • Django-Haystack part II by Daniel Greenfeld
  • Plan the Django weekend get together
  • Show and Tell

Wednesday, August 12, 2009

NOVA-DUG scheduling

I need to post about NOVA-DUG more frequently, no?

NOVA-DUG is postponed until next week (August 19th). I'm working with Eric Houghman of the Nature Conservancy to work out a formal long-term calendar. More this evening.

Friday, July 17, 2009

Turning away from CAPTCHA

When I first encountered CAPTCHA I thought it was a grand idea. My opinion has changed.

First of all I believed it allowed humans and machines to be differentiated on the web. Sadly, cracking CAPTCHA is done on a regular basis, and there are white papers on how to do it in lots of different languages (such as this one in Python). Bugs in the submission system or cheap human labor works as well. There are enough ongoing issues that most registration systems still include some sort of email system to help filter out the robots.

Second, CAPTCHA fails on accessibility. Yes, you can provide an audio alternative, but what if your users are blind AND deaf? Well, I've actually been told by accessibility experts that a non-CAPTCHA form should be provided for those people. Yes, when I said 'experts', I meant plural!

So where does that leave us for weeding out the humans from the computers?

Right now I'm a fan of logic based CAPTCHA alternatives. The idea is to provide simple questions that are relatively easy for humans to solve and hard for computers to answer. A good example would be, 'Today is Saturday. Yesterday was ___', and the idea is that you should have hundreds or thousands of questions. In fact, I came up with a Plone widget package called humanator to support this concept. There will be a Django version shortly.

There are some issues to overcome:
  • We need to cook up a few thousand questions to make it a bit harder on the brute force people.
  • Internationalization will require translators from many languages to support the projects.
  • There is also the issue of the cultural context of the questions. Since this is supposed to be user friendly we don't want to ask any inappropriate questions. I can police English pretty well, but I'll have little control over what happens in other languages.
  • Some people thing the logic method is weaker from a security perspective than CAPTCHA. Both arguably rely on a form of security through obfuscation, and I think with about the same amount of work both can be hacked. But a logic based system is easier to set up. ;)

Wednesday, July 8, 2009

NOVA-DUG meeting notice for July 8th

Tonight, July 8th, we are planning to get together from 7:30-9:00 pm at the Ballston Commons mall in Arlington, VA.

Location
Ballston Commons Mall Panera (ignore google maps and just go into the front entrance of the Mall). Email or twitter me (pydanny) if you have difficulties finding the place.

Agenda
  • Meet and greet!
  • Present the rules of NOVA-DUG meetings
  • Plan future sessions of NOVA-DUG
  • Discuss DjangoCon
  • Show and Tell
  • Socialize!

Thursday, July 2, 2009

Quitting Caffeine Fail

In the crazy heady days of May two months ago I decided to quit consuming caffeine.

I cut out coffee, soda, and black tea. It was surprisingly easy. Hooray!

So I happily went along drinking herbal teas like chamomile, cinnamon-orange, peach, and of course, green tea. Life was great! I was getting my anti-oxidants and none of the bad stuff. I could hang with my co-worker Katie and be one of those 'cool non-caffeine drinkers'.

So one day weeks ago I mention to Katie at some point that I was going to make some green tea and offered her some. She said she couldn't have it because of the caffeine, then she blinked.

Which means she just figured something out. Then she declared:

OH MY GOD YOU HAD NO IDEA GREEN TEA HAD CAFFEINE!!!

That was followed by a bit more of mockery.

So yeah, I failed to quit drinking caffeine then. However, today, while I'm home being sick, I'm trying to quit again. Wish me luck.

Wednesday, June 24, 2009

What happened to NOVA-DUG?

The Northern Virginia Django Users Group is still around. Really! So when are we going to hold the next session?

June 8th.

What happened? Why so few meetings recently?

A number of life-changing events happened over the past few months. This month alone I went on vacation, am moving twice. Lots of other stuff that just threw a damper in the works.

Being seeing you on July 8th.

Update: Thanks Chris Adams for spotting my date mistake.

Friday, June 19, 2009

Thanks for San Francisco Link

Until I unite my blogs under a new location in the distant future, here is my original posting:

http://dannygreenfeld.blogspot.com/2009/06/thanks-for-san-francisco.html

Friday, May 29, 2009

I don't like Integrated Development Environments

I really don't like Integrated Development Environments (IDEs). I don't like code completion, class browsers, object inspectors, class heirarchy diagrams, source control management in whatever I am editing coding with. I find such tools arcane and frustrating.

Why?

Its because I want to be able to feel the design of a module. When I manually introspect things I feel like I am sifting through the sand of the module to see what it gives me. I feel it in my gut that this is how I learn a language and use it best of all. Python makes that very easy for you with its powerful introspection capabilities which you use on the shell. I find switching to the shell lets me separate the capabilities of the module from the code I are working on. Which for some reason I find a lot more comfortable and intuitive. Your own mileage may vary.

If I do need a class hierarchy diagram, I just write a fun little python script which generates some dot notation and run graphviz's dot or neato utility.

If I do need source control management, thats what the command line is for!

Also, there are times I have to go and do things on systems besides my own. I can't expect to have Eclipse or NetBeans there. Or if they are there by some weird chance, they won't be configured the way I want.

Keep in mind I do like code highlighting. So I guess that makes me a text editor fan. And now on to my favorites:

Textmates (Mac only) http://macromates.com/
Kendall Clark introduced me to this tool back in April/May of 2006. I was very quickly hooked. It was much better than the TextWrangler that was giving me grief. And also much less arcane than Emacs. It is the one piece of software I'll actually pay to buy to use on the Mac!

Emacs http://en.wikipedia.org/wiki/Emacs
Back in the 1990s I did Perl for a short time and was introduced to Emacs and Vi. Emacs clicked for me, because even its arcane commands worked better for me than Vi. These days my Emacs skills are not superb, but I can get by on any machine that has it installed. So that means any Mac or Linux machine I stumble across.

Textpad http://textpad.com/
So my dark secret is that until December 2006 I did much of my work in Windows. Yes, my first python work was all developed on Windows! Anyway, I had stumbled across Textpad during a Java job and kept using it across other languages and efforts. It was light, did code highlighting, and kept out of the way. Perfect! Well, maybe not since it crashed about once a day. Still, it was better for me than more sophisticated alternatives.

Monday, May 25, 2009

ColdFusion and deprecated code

Lets take a step back in time to 1999. At that point I had been doing a mix of Foxpro for DOS, Perl, and an obscure language called WebML (don't bother looking it up, it doesn't seem to exist anymore). I admit I liked Foxpro but recognized it was a coder's dead end. Perl gave me regular expressions which I liked but I was uncomfortable with everything else. WebML was okay but it was clear that it was too obscure. Around that time I even talked to some people doing something weird with Python and Zope in Fredericksburg, but that sounded even more obscure.

At my job we had someone throw together a ColdFusion 4.51 application. They needed some help. I took a look and quickly figured out the issues, made corrections, and realized this language was really simple. One thing I noticed while pouring over the built-in documentation of the CF IDE (this was back when I used IDEs) was that there was a list of deprecated functions. You were supposed to stop using parameterExists and use isDefined instead. I shrugged, followed the specification, and moved on.

Years went by. I did Java and ColdFusion. Both were annoying because of spaghetti code. Java was also annoying because of boilerplate and the static typing, ColdFusion was annoying because of the tags, the weird ecmascript implementation, and the insistence of developers on using the deprecated functions.

The most obvious example was the parameterExists vs isDefined issue. The former, paramExists accepts a variable, so you couldn't build dynamic code. Specifically you did something like parameterExists(my_variable) instead of like isDefined("my_variable"). This meant more cut-and-paste coding. Also, because it was a deprecated function, the owners of ColdFusion didn't care about the performance of the code. So instead of looping through an array of a hundred or so variables who existence you wanted to check using isDefined, people would still @#$%ing type out parameterExists a hundred times. Or more commonly, cut-and-paste from one code template to another, across applications. A good number of the parameterExists at the top of a CF page often have nothing to do with the purpose of the page and people would wonder why things ran so slow.

Sadly, this sort of behavior still happens today in the CF community. Worse yet, because in my experience the CF community tenure is more important than anything else, the worst offenders are often the people who have been using the tool the longest.

So lets go through a quick summary of my issues with ColdFusion and deprecation:
  1. Deprecated language elements, even if deprecated over 5 releases, are... well... deprecated.
  2. Deprecated language elements are likely the last to be examined in a release for performance or security reasons.
  3. Deprecated language elements can go away.
  4. The worst offenders of using deprecated language elements tends to be those who have used the language the longest.

Wednesday, May 20, 2009

Eight things I don't like about python

Jesse Noller threw down a challenge on twitter. Or rather he said something and I've purposefully taken it out of context and am considering it a challenge. His statement was that you should be able to to find at least five things you don't like about your language or tool of choice.

So why should you read what I have to say on the subject?

This one is easy. I'm not a luminary in the field of python. I'm just Joe Developer. I am the user base. If something annoys me then it could annoy others.

1. Division sucks in Python

This is fixed in Python 3 and right now in the python version I am using I can do from __future__ import division. Nevertheless this should have been fixed ages ago with the release of python 2.4.3 or earlier. Why python 2.4.3? Because it was on that release that I started doing professional python coding.

2. TKinter blows

I've done a tiny bit of TKinter coding. I stopped because it was too ugly. Python needs either an updated, prettier version of TKinter or it needs something in its place as part of core python.

3. Lambdas make it easy to obfuscate code

I remember when I thought Lambdas was overheated excrement. I changed my mind. I found myself obfuscating my code, or trying to stumble through someone else's code that was ridden with lambdas. I suppose they have their place, but it seems like 90% of the time they don't add anything besides reducing your line count by a small amount.

4. Sorting objects by attributes is annoying

Yes, the snippet of code is trivial. Still, couldn't sorting objects by attributes or dictionaries by elements be made a bit easier? sort and sorted should have this built right in. I still have to look this up each and every time.

5. Regex should be a built-in function

Actually I sit on the fence on this one. Sometimes I wish python was like Perl and Ruby in that you didn't need to call in a new module when you needed a regular expression. Other times I am grateful I don't have to wade through the inevitable obfuscated crap we coders all too easily generate with regular expressions.

6. Reload could be less annoying

I am a python coder. I love the shell. Except reload only works on modules. Bah! I want it to work on every object in the stack.

7. Help doesn't let me skip over the '__' methods

Python's introspection and documentation features makes me happy. And yet when I have to scroll past __and__, __or__, and __barf__ each time I type help(myobject), I get just a tiny bit cranky. I want help to accept an optional boolean that defaults to True. If you set it to False you skip anything with double underscores.

8. Not enough female Pythonistas

I'm lucky that I work with a lady pythonista. And I've got an internet friend who is also a lady pythonista.

And that is it.

What a damned shame.

Conclusion

I've just handed you eight things to think about. It was hard coming up with actual meaningful things, which proves that at heart I'm just a gushing Guido Van Rossum fan boy.

Update 2011/11/04

New commentary on this post is at Redux: Python Things I dont like

Monday, May 11, 2009

Help me make a new Avatar!


A couple years back I went to Naples, Italy for the 2007 Plone Conference. It was my first trip across an Ocean. My first trip to Europe. In Heathrow airport I met Rocky Burt and he took the picture that became my avatar.

Well, I want a new avatar. That means I have to do another cartwheel some place I've never been. Some place exciting. And that is where you come in.

Basically, I'm looking for suggestions of places to go or invitations to go visit you wherever you might be. My budget isn't large, but my enthusiasm is without bounds. I love the heat so if your idea or invite is cheaper in summer time that is even better. The costs involved determine the duration of the event. Off the top of my head I'm thinking of places like:

  • Africa
  • Asia
  • Brazil
  • England
  • France
  • Germany
  • India
  • Italy (even Naples again!)
  • San Francisco
Screw it. Lets go the whole way:
  • Anywhere a thousand miles away from Washington, DC.
This becomes feasible for me after May 22.

Quitting Caffeine

I don't remember my first experience consuming caffeine. My parents let us kids drink soda of all types, and that included colas. They also smoked around us and covered our house in artificial wood paneling. Ah yes, the lovely 70s.

As a teenager I drank lots of coca-cola with my buddies. I remember putting away 2-liter bottles. Was it then the energy of youth, the caffeine, or the sugar that made us jumpy afterwards?

During my early teen years I also started to work in restaurants. At my second job one summer I came in once after a 17 hour day and just felt dead. The Sou-Chef felt sorry for me and poured me a big coffee, dropped in an ice cube, and covered the result with fresh cream. I woke up after that and in the process, got hooked on coffee.

So it was back in my heady Java days of 2002 that I decided to quit caffeine. I had already kicked sugar for health reasons. Alcohol was something I only drank on special occasions. I decided I could be totally vice free. I don't remember my process, but I do remember being rather proud of myself. Then I got really sick. I drank lots of tea, forgetting somehow that the tea I was drinking was caffeinated. And I was hooked again.

As the years went by I would time when I would drink caffeine. I knew I had to drink it every 12 hours to avoid withdrawal. Coffee in the morning, soda at night. I had an addiction. I periodically gave thought to quitting, but the habit didn't seem so bad.

For the past six months, I've actually reduced my caffeine intake. Between smaller portions and longer intervals, I felt like it didn't rule my life anymore. For the past two months I've gotten it down to coffee in the morning and diet coke when I eat away from my desk.

Then, for health reasons, several months back my co-worker Katie Cunningham had to quit caffeine. Suddenly I felt awkward every time I drank coffee or soda around here. The same way I feel when eating meat around a vegetarian Hindi or pork around a Jew or Muslim. I'm not sure why I feel awkward that way, but I do.

Recently I've been making a lot of changes in my life. I've stopped watching television entirely, become a neat nick (I'm not that messy to begin with), and quit caffeine.

Considering how infrequently I drink caffeine quitting it wasn't that hard. I had my last bit of soda on Saturday morning. The only symptom I suffered was last night I went to bed with a headache; a headache that might be allergy (high pollen count here in Virginia, US) related.

I think I'm vice free now. Well, almost. I do drink alcohol socially. And if I run into insomnia I will have either red wine or a beer if I can't find any wine.

Thursday, May 7, 2009

DC Sprints location is changed!

Cosi seemed great. Decent food, internet, pleasant seating.

Except they blocked the really useful ports. SSH, Git, you name it.

So we have switched to the Arlington Central Library, just two blocks away.

http://www.arlingtonva.us/departments/Libraries/about/LibrariesAboutCentral.aspx

Wednesday, May 6, 2009

DC sprints location is official!

All the details can be had by following this link:

http://groups.google.com/group/NOVA-DUG/web/dc-branch-of-the-eurodjangocon-09-sprints

I'm rather excited by this event. It is the first in what I hope becomes a DC tradition of doing 'local mirrors' of python conference sprints with involvement from all the area python groups. This way, more people get to contribute, our community works better together, and the networking opportunities can abound.

On the other hand, I wish I had found more time to organize this event. And that I had found a good location inside of Washington, DC. I suspect this first effort will have a low turnout, but I won't mind being pleasantly surprised. ;)

My hope is that this year alone we might be able to exploit similar efforts in 2009 for the Euro Pycon, DjangoCon, and Plone Conferences.

With that in mind, I'm going to insist that these local mirror sprints be completely framework and tool neutral. For starters, under the hood, aren't we all just doing python? Plus, I'm of the very firm belief that any major system with initiative has things to teach, be it lessons learned or neat ideas. For example, Jacob Kaplan-Moss uses zc.buildout, which grew out of the Zope community. And while we might not have the ability to listen in on actual conference sessions, think about the chances we'll get to look at each other's tools and methods.

Wednesday, April 29, 2009

NOVA-DUG April 29th summary

For the second meeting there were four attendees besides myself. Again it rained, three people from last week were out of town, and my co-leader was at home tending to an injured spouse, so that knocked down our numbers. Yet I'm fine with that, as I realize it can take time for these groups to grow. Attendees (first name only for now - I will update if attendees contact me and request their names/jobs):
  • Andrew
  • Cory
  • Matt
  • Ross
  • Danny (me!)
We went over the reasons behind founding the group and had everyone meet each other. Then we discussed the DC Branch of the Euro DjangoCon Sprint. I've summarized it here at my DC branch of the Euro DjangoCon Sprint Presentation. One thing I tried to make clear about our upcoming local area sprint is that we want it to be very inclusive. If you go, we'll try to give you as much guidance as you need. :)

After that I presented my first draft of my testing in Django presentation. Yeah, I've gone a bit mad with Google Presentation recently. Some day I wouldn't mind making this into an actual conference presentation, but it needs more work and experience from yours truly. The guys asked some good questions, and made some excellent observations that will go into future changes of this effort.

Then we went over in detail various bits that individuals are working on. I think Cory might be a good resource for Django scaling issues, and is also into security. Matt is working on a custom CMS tool for his job that sounds pretty interesting. Ross is the guy behind DC Tech Events. I got asked questions about Pinax.

There was more. Lots more. I probably need to talk less and let things go of their own accord. :P

Thursday, April 23, 2009

NOVA-DUG meetup for Wed, April 29th

We are planning to get together on Wednesday, April 29th, 2009, at 7:30pm EST most likely at the Ballston Commons mall in Arlington, VA. We know this is the day right before Django District, but since Euro DjangoCon is the next week, and we want 'host' a DC area sprint during the Euro DjangoCon sprints on May 7th and May 8th, we felt it was important to get another meeting off the ground.

Location

Ballston Commons Mall Panera (ignore google maps and just go into the front entrance of the Mall)

Agenda
  • Meet and greet everyone
  • Present the rules of NOVA-DUG meetings
  • Discuss DC Area branch of the Euro DjangoCon sprints (May 7th -8th)
  • Testing in Django presentation

Wednesday, April 22, 2009

Sweet spots of Plone

Yes, I am posting this with Django and Pinax tags because I think my Django and Pinax friends can learn from the lessons of Plone.

I'm admittedly more interested in doing Django these days yet I keep myself firmly aware of the things for which I think Plone (and its components and relatives) is unsurpassed in the Python framework world. Arguing these things to Djangonauts is interesting, because so many times they just reject things out of hand (just like certain Zope zealots I know). And I think that is to their loss. When you hit Plone's sweet spot, things get interesting.

Standards
I've ranted about this before. In essence Plone follows a subset of the Dublin core. Any database object in Plone has certain fields you can rely on in searches, views, and business logic. You don't have to introspect the objects to find these stock fields. Until I went back to entirely developer defined models with Django, I forgot just how much I had taken this for granted.

Workflow
Years ago some madman integrated DCWorkFlow into Plone. You can build custom workflows either in script or via the UI. The scripts and interface to use it has been unpleasant until recently, but then name a workflow engine capable of handling complicated workflows that is fun/easy to use? Thanks to Martin Aspelli his product called collective.wtf, Plone workflow management has become much, much easier. As far as I know, nothing in Django (or TurboGears or Rails) compares except maybe GoFlow, and I don't speak French.

Object Oriented Database
I like the Django ORM. I like SqlAlchemy. Until I run into the edges of the fact that they are modeling table records as objects. Object Relational Impedance Mismatch anyone? Ouch the pain! I do recognize that relational databases are very useful and powerful, but sometimes I wish things were different. One day, when I'm indepedantly wealthy and own my own private tropical island I plan to get the Django ORM running with the ZODB.

ACLs
Groups and Users permissions in Plone are implemented really well. Object oriented databases handle hierarchies and references very well, so the whole parent-child ownership thing is done easily. This is critical in CMS work - ownership and control. Other frameworks have this built-in, but it is not automatically attached to each content object that you create. You get very used to it being magically done for you in Plone.

Monday, April 20, 2009

Finger method of judging graphic design

Katie Cunningham mentioned this in her blog post today. Since I was asked what that was meant by several people I decided to write it up so you can see one of my rants.

The method is simple:
  • Put your design on a screen.
  • Your hand goes on the screen with fingers horizontal. Ignore the thumb.
  • Count how many fingers it takes from the top of the screen to content. If you run out of fingers on one hand that means your wonderful design is going to force users to scroll to content. Maybe not on your huge desktop monitor, but on the sort of desktop monitor or laptop that has become ubiquitous, absolutely!
  • I have tiny hands for a guy. So for you people with big hands, try it with two or three fingers.
Now lets take a look at how the Python community matches up to my finger method.
So the Python community does pretty well on average. So does Facebook, Twitter, and the other good social networking sites. Now think about the sites that never went anywhere and how my finger method applies.

How about some some abject failures from outside the python community?
Is this scientific? Heck no. Yet it is a quick and cheap gauge as to why you rarely get repeat visits to your site or why they only visit your download pages.

Friday, April 17, 2009

What I learned at Pycon 2009

Why write a repetition about all the things that everyone else has documented the greatness of Pycon 2009 when I can write about the awesome stuff I learned?
  • How to use Python via XLRD and XLWT to handle truly brobdingnagian Excel files (8 million records anyone) without anything Microsoft.
  • New Internet scraping tools like html5lib and mechanize to reinforce lxml and the fading but still lovable BeautifulSoup.
  • Many awesome things about the Sphinx documentation experience.
  • That spending a day in test focused sessions is an intense experience.
  • argparse makes writing command line python interactions so much easier.
  • Good rules of thumb for breaking apart applications in not just Django, but for python modules in general.
  • Git! The Pinax community embraced Git just as I was started to work on it. I owe a lot to Brian Rosner's patient coaching, and Jannis Leidel's patience.
  • That I am addicted to checking on the Github graphs to see how I compare.
  • 15 minutes of sitting next to James Tauber gave me the grounding I wanted in JQuery event handling.
  • That people who hate XML based template languages HATE them. HATE HATE HATE.
  • Mashed potatoes and bacon pizza is yummy. And spinach and anchovy pizza rocks. Yes, I ate anchovies and oddly enough liked them.
  • I really want to teach python, Django, and Pinax. I may not be the best coder by far, but I think this could be the largest contribution I ever make to this community.
Some of what I need to follow up on
Did I miss anything? Let me know!

Wednesday, April 15, 2009

NOVA-DUG April 15th summary

Forour first meeting there was seven people and several cancellations. Not bad for short notice and rain. Attendees (first name only for now - I will update if attendees contact me and request their names/jobs):
  • Eric (possibly providing meeting space!)
  • Sal
  • Jack
  • James
  • Cory
  • Katie
  • Danny (me!)
There was talk of Django projects still under development, with one public effort exposed by Sal:
We explained Pinax to Sal. In return South was mentioned by Sal as a functional Django migration tool (thanks to everyone who pointed me at the right place). Corey talked about the limitations of the Django ORM compared to SQL Alchemy. I think we agreed to disagree about templates. Everyone griped about the quality of the Panera coffee shop's wireless network.

Upcoming planned events:
We chatted about a bi-weekly schedule. We may have to do some juggling to avoid falling on the same weeks as ZPUG-DC or Django District.

Future format ideas include user presentations, voting on the open source django presentation of the week, and planned attacks on user problems.

Thursday, April 9, 2009

Show me your open source Django blog application

Want your blog engine to be used by NASA?

Unlike everyone else in the Django world, I have not written a blog application.

Instead I want to use your blog application. Definitely for my upcoming blog transfer to my own personal site (Blogger's limitations annoy me), and possibly for use in NASA Science Mission Directorate Spacebook project. So what am I looking for in your blog?

In no particular order these are the must-haves:
  • Elegant user interface.
  • Follows Django/Python best practices.
  • Easy to integrate into another application (which should be the case if you followed the above point).
  • Code highlighting via pygments.
  • Relies on JQuery for JavaScript, and degrades properly.
  • Publishes legal RSS feeds.
  • Allows for use of several input formats (Restructured Text, Markdown, etc)
  • Hooks for integrating WYSIWYG editor
  • Allows for multiple users each with their own blog.
  • Renders humanely in FF, Safari, and IE 6, 7, and 8.
  • Any sort of decent documentation.
In no particular order these are the nice-to-haves:
  • Publishes ATOM feeds.
  • Allows for multiple users on a particular blog.
  • Already has a WYSIWYG editor.
  • Handy import/export functions that follow whatever standards Blogger might have.
Candidate killers:
  • I have my own server space. Plus, NASA has its own servers. So Google App Engine compliant blog systems need to also support the standard Django ORM.
  • I am doing this in Django/Pinax/Python/PostGreSql on Linux. Systems that do not play well there need not apply.
What do you get out of this if I pick your blog engine?

Well, as much as I am a fan of Pinax, the default blog application doesn't do everything we want it to do for Spacebook. So your application might become the blog engine used by us. And when we launch, we'll be sharing credit with anyone who contributed from the open source community to our efforts.

Edit on August 26th, 2010: I solved how to do this research by co-authoring Django Packages which gives us this handy reference. Also, at this point in time, as part of larger systems, I've written several blog systems for clients.

Wednesday, April 8, 2009

NOVA-DUG meeting on Wednesday, April 15th, at 7:30 pm

The Northern Virginia Django Users Group NOVA-DUG plans to get together for the first time on Wednesday, April 15th, 2009, at 7:30 PM somewhere in Arlington, Virginia. Everyone is invited, although my bet is that only people from the Washington, DC metropolitan area will show up.

Location?

We are working on that. If we can't find a decent sized meeting room to host us, we will likely converge at Panera Bread in Clarendon. It is close to the Clarendon orange line metro stop, has eatable food for dinner, and has free wireless that works with every operating system AFAIK. If a lot of people show up, we may not be able to all sit together, but we'll make sure that everyone gets to meet everyone else.

http://maps.google.com/maps?oe=utf-8&client=firefox-a&ie=UTF8&q=panera&near=Arlington,+VA&fb=1&split=1&gl=us&view=text&ei=v8vcSZH7NIjaNveM8OEK&cd=1&hl=en&sll=38.879623,-77.110897&sspn=0.006295,0.016628&latlng=38879623,-77110897,15003625430679650664&sig2=echk_5e81Ly5FHLc2OaNhA&dtab=0&oi=&sa=X

Why the rush?

Because the inertia is there.

Because we (myself, Katie Cunningham) have waited across languages for years for a user group to meet on a night and location that works for us.

See you there!