As Python developer you often have the need for profiling and benchmarking applications. The standard tools are the Python profiler hotshot or standard debugging code with timestamp. Within one of our current project I had to track down performance issues related to LDAP connectivity. The goal was to measure the time spend within the connect() and search() method of the LDAPUserFolder implementation. As result I wrote a small @timeit decorator that allows you to measure the execution times of dedicated methods (module-level methods or class methods) by just adding the @timeit decorator in in front of the method call.
import time def timeit(method): def timed(*args, **kw): ts = time.time() result = method(*args, **kw) te = time.time() print '%r (%r, %r) %2.2f sec' % \ (method.__name__, args, kw, te-ts) return result return timed class Foo(object): @timeit def foo(self, a=2, b=3): time.sleep(0.2) @timeit def f1(): time.sleep(1) print 'f1' @timeit def f2(a): time.sleep(2) print 'f2',a @timeit def f3(a, *args, **kw): time.sleep(0.3) print 'f3', args, kw f1() f2(42) f3(42, 43, foo=2) Foo().foo()
There is also the profilehooks module by Marius Gedminas basically doing something similar (in detail: it profiles the hooked method). It is perhaps the better alternative.
Event handling in Plone and calendering in Plone is traditionally in some way a pain. In particular the standard Plone event type has several problems:
- no proper handling of all-day events
- no natural support for events having only a start date but on end date
- an old-fashioned calendar widget with a fixed format YYYY-MM-DD (unacceptable for German users)
- no support for recurring events
- partly broken iCal support (especially with respect to all-day events)
As part of a customer project we created new event type vs.event (based on ideas, experiences and code of p4a.ploneevent, zopyx.multieventcalendar and another internal event implementation).
vs.event tries to approach most of the problems and provides the following functionality:
- recurring events (based on p4a.ploneevent)
- a new calendar widget
- real support for all-day events
- extended support for attendees and attachments (UI and iCal level)
- working iCal/vCal export for all-day events
- full integration with Plone4Artists calendar (must be installed seperately)
- support for supplementary-events (one master event and several depending events)
vs.event integrates seemlessly with Plone4Artists calendar and gives you a pretty powerful calendaring solution.
The implementation is still in progress and basically needs some minor UI polishing and i18n contributions and fixes.
There is also PLIP 9302 for inclusion of the vs.event functionality with Plone 4.
If you travel as a European to the United States, you always had to fill out the green immigration form. The immigration form contains such reasonable questions about your collaboration with the Nazi Germany or if you plan doing terrorist attacks or if you are committed to do immoral actions - clever questions :-) Effective 2009, USA introduced the new Electronic System for Travel Authorization (ESTA). The basic idea of ESTA is that you have to register in advance over the internet. The ESTA application is basically the electronic version of the green from. You might think that ESTA replace the green from (hurray, no more need for filling out the form while travelling on the plane)...but NO...you are still required to fill out the green form on paper in addition to ESTA. US bureaucracy rocks! The bad thing about ESTA is its terrible implementation. The internet application looks like a bad pile of forms as of the early 90s. In addition it mixes up English and German messages and shows German error message using entities (someone for to use structure: ?). So if you travel to US: keep your travel plan ready - you must tell the destination address to your airline, print it on the green form and ESTA wants to know if you are a terrorist some days in advance...I really love US :-)
Older versions of SmartPrintNG contain a security related issue. Please upgrade to SmartPrintNG 1.2.8
This was my 4th PyCON in USA (Chicago) and it was actually the best one - perhaps it was one of the best conference - at least from organizational side. Some of the news I picked up over the last days:
- Google is working on a CPython version based on LLVM which should provide a performance boost by a factor of 5. Right now the overall performance increase seems to be about 30%. Will have an eye on using their work together with Zope. Zope already compiles smoothly however raises a weird cPickle error during the startup phase.
- PyPI mirroring: PEP 381 is the further standard for creating the official PyPI mirror infrastructure. Tarek Ziade and Martin von Loewis will be working on this project. I had some discussion with Martin about reusing parts of the existing z3c.pypimirror code for the new infrastructure.
- At the Python language summit was decided to rethink and reimplement parts of the setuptools in order to move core functionality into the Python distribution.
- Python 3.1/Python 2.7: it is unlikely at further Python 2.X version will see any major new feature except for features introduce with further Python 3.X version being backported to Python 2.7 in order to perform a smooth transition path from Python 2.x to Python 3.x. The idea of a 3to2 converter came up (basic idea: write your new code for Python 3 and port it back to Python 2).
- Zope visibility at PyCON: Martijn Faasen and Lenart Regrebro gave great lightning talks about the current state of Zope, several talks were focused on Plone and Jim Fulton tried to attract people to zc.buildout which is obviously widel unknown within the Python world.
- I had only one day for sprinting and I worked on stuff for the new Zope 2 microsite. Bajiu made great progress on www.buildout.org and other peoples are working on a concept and story for the relaunch of www.zope.org...lot's of interesting things going on...hard to follow all of them..
- and: Python has a Pony :-)
After the failure of the new.zope.org project I took over the responsiblity for creating a dedicated Zope2 microsite - following the microsite approach of Grok (grok.zope.org).
- the current working copy of the new site is maintained on zope2.zopyx.de
- the site structure is almost done
- I collected a bunch of existing content and created a lot of new content (how not complete yet)
- A small team is working on the design and layout and its adaption into a Plone theme (don't be confused by the current look&feel - the site uses the Mimbo theme in order make the site less plone-ish)
- the existing Zope 2 documentation (The Zope Book, The Zope Developers Guide, some ZODB articles) is now available from docs.zope.org
Your contribution is needed
In order to get this project done we need some more help:
- proof-reading of the existing content
- filling the free pages with content e.g.:
- http://zope2.zopyx.de/about-zope-2/5-reasons needs some text about Python and the ZODB
- http://zope2.zopyx.de/about-zope-2/who-uses-zope-2 needs some short references to cool Zope apps or big companies using Zope - marketing buzz goes here
Most of the stuff are low-hanging fruits - most solutions providers should have related material in their drawers either in form of presentations, marketing material or something similar. Please contribute!
If you are interested to help out in some way and getting this thing done (instead of discussing it to death), please contact me directly through mail.
- Having the zope2.zope.org offically online by the end of May 2009 (around the time for Zope 2.12 beta1)
Just a short reminder where we are with the Zope 2.12 release:
- Zope 2.12 will come with ZODB 3.9
- Zope 2.12 will run on top of Python 2.5 and 2.6 (likely with inofficial support for Python 2.4)
- Zope 2.12 will be fully eggified - means you install Zope 2.12 directly from PyPI using easy_install or zc.buildout
- Lots of cleanup on the module level (e.g. ZClasses have gone forever - like it or not)
- Ships with the Zope components library (aka Zope 3.4)
- RESTified documentation in order to generate nice looking HTML/PDF documents using Sphinx
- lots of other small details
A first alpha release will be available by the end of February 2009.
Kudos to all people that contributed to the current release.
Special kudos to Hanno Schlichting for his fearless fight against the Zope 2 core, eggs and other evil.
You might be astonished by this blog post but it is now time to speak up.
Pope Benedict XVI (formerly known as Joseph Alois Ratzinger) approved a decree lifting the excommunications of several leaders of the Society of St. Pius X traditionalists in order to avoid a further schism within the Catholicism. Unfortunately he overlooked that one of leaders of the Pius society - Richard Williamson - is a convinced denier of the Holocaust. Williamson claims that only several thousand of Jews died in the gas chambers of Nazi Germany - compared official number of six million Jews. Can there be any justification for rehabilitaing Williamson? No - never ever.
Ratzinger - in his former position was head of the Congregation for the Doctrine of the Faith - was known for his strong conservative postions in various fields like women in church, homosexuallity and abortion. Most of these positions were to some point at least consistent (although usually not acceptable for me) but this late action is absolutely unacceptable.
When Razinger was elected Pope in 2005, the german newspaper BILD celebtrated the event with the words "Wir sind Papst" ("We are Pope") and in the following years Ratzinger made the impression having relaxed some of his positions...but now this... Ratzinger - as a German Pope - should know best about the German history between 1933 and 1945.
Although I used to work for the Catholic Church for more than ten years as organist and choirmaster, I left the Catholic Church for a variety of reasons. Now with Benedict XVI being head of the Catholic Church since four years, I am affirmed that leaving the church was the right decision. A Pope making the Holocaust respectable again is just a shame for the Catholic Church and as a Geman one can only be ashamed as well.