<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-11598265</id><updated>2011-04-21T19:12:04.349-07:00</updated><title type='text'>I blog therefore I am</title><subtitle type='html'>A space to put my thoughts into writing. Topics that I plan to write about include but are not limited to: software development, web application development, Python, Zope, Plone, Smalltalk, Ruby, Javascript and Jabber.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-11598265.post-113601199703968711</id><published>2005-12-31T00:52:00.000-08:00</published><updated>2005-12-30T22:53:17.053-08:00</updated><title type='text'>Happy new weblog</title><content type='html'>The very last day of the year seems like the perfect time to say goodbye to Blogger and hello to my new blog site.&lt;br /&gt;&lt;br /&gt;From now on this blog can be found at &lt;a href="http://blog.delaguardia.com.mx"&gt;http://blog.delaguardia.com.mx&lt;/a&gt;, where I intend to also host my business web site in the near future.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;2005 was a very interesting year for me. My life changed completely during this time, with the arrival of our son and my departure from the web development company I helped create more than 10 years ago to embrace the independent developer lifestyle. It was a great year.&lt;br /&gt;&lt;br /&gt;I learned a lot of things in my first year of blogging. First of all, being a constant blogger requires a lot of work. Even simple posts like this one take more than a couple of minutes of my time, so I really had to decide if I was willing to dedicate enough time to this activity. To be able to decide, I needed to think more clearly about my objectives for next year and beyond and how blogging fit with those. Obviously I decided that it fits.&lt;br /&gt;&lt;br /&gt;I also learned not to talk about what will be in future posts, since many times new interests, time constraints and other circumstances can make a blogger break his promises.&lt;br /&gt;&lt;br /&gt;Well, 2006 is just around the corner and I have ambitious goals for my first full year as an independent web developer. Let's see how well I can carry them out. Happy new year to anybody that happens to read this post, may all your projects be successful and all your dreams come true.&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://blog.delaguardia.com.mx"&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-113601199703968711?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/113601199703968711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=113601199703968711' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/113601199703968711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/113601199703968711'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/12/happy-new-weblog.html' title='Happy new weblog'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-113415604728465289</id><published>2005-12-09T10:54:00.000-08:00</published><updated>2005-12-09T11:20:47.300-08:00</updated><title type='text'>Long absence</title><content type='html'>It's been a month since I last posted. I was busy teaching a course on Plone and Zope outside of my office (which is a nice way of saying outside of my house). Now that I will have a little more time for blogging, I am thinking that Blogger is no longer a viable service for my blogging needs. The lack of categories for posts sometimes constrains me a little on what I want to write about, since my feed is part of a couple of language specific sites and I feel kind of guilty writing about off-topic stuff. Also, there are planet-something sites that will not take my feed if there is no way to separate the posts by category.&lt;br /&gt;&lt;br /&gt;Of course, blogger allows you to create multiple blogs, but I have enough trouble taking care of just this one. What to do, then? I recently subscribed to a hosting service and I plan to set up my blog there. I now have to figure out how to make the change transparently.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-113415604728465289?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/113415604728465289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=113415604728465289' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/113415604728465289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/113415604728465289'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/12/long-absence.html' title='Long absence'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-113157917242608599</id><published>2005-11-09T15:21:00.000-08:00</published><updated>2005-11-09T15:32:52.456-08:00</updated><title type='text'>Zope 3 Project Starter</title><content type='html'>I recently posted a &lt;a href="http://cguardia.blogspot.com/2005/11/structure-generation-and-zope-3.html"&gt;comment about the need for a Zope 3 structure generator&lt;/a&gt; that allows new users to quickly set up a working project instead of having to create a number of files and directories by hand. Well, Duncan McGreggor has just announced &lt;a href="http://www.zope.org/Members/adytumsolutions/z3project_starter"&gt;z3 Project Starter&lt;/a&gt;, which is a Python script that automatically generates a Zope 3 project structure. Good work, Duncan!&lt;br /&gt;&lt;br /&gt;Now hoping for the other part of my wish: could something like this be part of the official Zope 3 distribution?&lt;br /&gt;&lt;a style="font-style: italic; color: rgb(0, 0, 0);" href="http://www.blogger.com/profile/5061192"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-113157917242608599?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/113157917242608599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=113157917242608599' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/113157917242608599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/113157917242608599'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/11/zope-3-project-starter.html' title='Zope 3 Project Starter'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-113109332147711533</id><published>2005-11-03T22:30:00.000-08:00</published><updated>2005-11-04T12:34:01.803-08:00</updated><title type='text'>Structure generation and Zope 3</title><content type='html'>Ruby on Rails has been (unfairly) criticized by some outsiders because of its use of code generation to create a project, but &lt;a href="http://www.loudthinking.com/arc/000533.html"&gt;David Heinemeier Hansson explains&lt;/a&gt; that RoR, rather than generate lots of code at the start of a project, generates instead the complete structure of the project with &lt;span style="font-style: italic;"&gt;&lt;/span&gt;barely a few lines of code.&lt;br /&gt;&lt;br /&gt;He goes on to extol the virtues of what he calls structure generation, which in a way complement Rails mantra of &lt;span style="font-style: italic;"&gt;convention instead of configuration &lt;/span&gt;with the corollary  of &lt;span style="font-style: italic;"&gt;convention through code instead of documentation&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Structure genaration is not anything new, of course. &lt;a href="http://raibledesigns.com/wiki/Wiki.jsp?page=AppFuse"&gt;AppFuse&lt;/a&gt; is a very popular application that does just this for Java web applications. But still, I think he is right. It is much easier for a new developer to type &lt;span style="font-style: italic;"&gt;generate model&lt;/span&gt; than to have to remember which files are needed and where to put each file.&lt;br /&gt;&lt;br /&gt;Although Zope 3 does value configuration greatly (at the point of having a special language, ZCML, specifically for configuration), projects would really benefit from such an approach where initial project set up is concerned. Just look at the very helpful &lt;a href="http://www.benjiyork.com/quick_start.txt"&gt;Benji York's Zope 3 Quick Start guide&lt;/a&gt;. There are several places in this document where he instructs the user to create a specific file or directory. Wouldn't it be a lot better if Zope 3 users could just type one command and have this structure generated for them?&lt;br /&gt;&lt;br /&gt;There may be some third party scripts that do this already, but I think something like this should come with the core framework. It's not that Rails is so much better than every other web app framework (it isn't), but these little touches go a long way in reinforcing this perception with many developers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-113109332147711533?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/113109332147711533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=113109332147711533' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/113109332147711533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/113109332147711533'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/11/structure-generation-and-zope-3.html' title='Structure generation and Zope 3'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-113099983070880539</id><published>2005-11-02T21:46:00.000-08:00</published><updated>2005-11-03T11:22:51.110-08:00</updated><title type='text'>Top ten things I hate about maintaining old Zope sites</title><content type='html'>Just to let off some steam from my almost exploding head, I have created the following list of Zope anti-patterns. The sad thing is that I have found lots of sites that have seven or more of these problems. Maybe I have incredibly bad luck finding these maintenance jobs or maybe this is the result of many Zope programmers getting stuck at the half point of the famed z-shaped learning curve and sticking to what worked for them from the beginning. Either way, it's not pretty.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;800 line long python scripts that clearly should be products.&lt;/li&gt;   &lt;li&gt;Except clauses without defined exceptions in Python scripts. This is not just a Zope thing, but try finding an error in any of a dozen participating python scripts when all of them use this mechanism.&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;Scripts that loop over the results of an object manager's objectValues comparing object properties to some other value to find matching objects. This is amazingly slow when the folder has many items. Why do so many Zope developers seem to be unaware of ZCatalogs?&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;DTML Spaghetti code. Just try understanding a page with a bunch of nested dtml-if/dtml-else statements.&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;One thousand ZPT pages that each repeat all headers, javascript menus and presentation tags. What should be the very simple task of modifying, for example, the company name, becomes an arduous chore. What is so complicated about define-macro and use-macro?&lt;/li&gt;   &lt;li&gt;Having one single ZSQL Method named generic_query or sql or some other name handle all SQL calls. The content of this method: &amp;lt;dtml-var query&amp;gt;.&lt;/li&gt;&lt;li&gt;ZPT pages that have more python code than XHTML tags. Business logic should be in Python scripts.&lt;/li&gt;   &lt;li&gt;Folders littered with dozens of objects named copy_of_xxx or xxx.OLD and similar names which indicate the objects where copied to test some change or something of the sort and then never erased afterwards.&lt;/li&gt;   &lt;li&gt;All those damn .zexp files that need to be passed back and forth when the whole site is contained in a folder in the ZODB.&lt;/li&gt;   &lt;li&gt;Relative links that do not take acquisition into account, leading to URLs in the location field of the browser that look like: http://azopesite.com/home/pages/mypage/home/pages/&lt;br /&gt;mypage/home/pages/mypage/scripts/ascript.&lt;/li&gt;   &lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-113099983070880539?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/113099983070880539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=113099983070880539' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/113099983070880539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/113099983070880539'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/11/top-ten-things-i-hate-about.html' title='Top ten things I hate about maintaining old Zope sites'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-113091640218572567</id><published>2005-11-01T22:34:00.000-08:00</published><updated>2005-11-01T23:28:05.266-08:00</updated><title type='text'>The day Kildall took flying</title><content type='html'>Maybe you have heard that story about the IBM PC and how IBM wanted to use CP/M, an operating system created by &lt;a href="http://en.wikipedia.org/wiki/Gary_Kildall"&gt;Gary Kildall&lt;/a&gt;, as the operating system for their new personal computer back in 1980. The story goes that Kildall wasn't there when IBM's people arrived to meet him, because he was off flying a plane. The IBM people then turned to Bill Gates and gave Microsoft the deal that would make this company the ruler of the PC world and Gates the richest man on earth. Microsoft didn't even have an OS at this time, so they hastily bought QDOS from some other Seattle developer (Tim Patterson), turned it into Microsoft DOS and proceeded to make history.&lt;br /&gt;&lt;br /&gt;It's a really good story, imagine losing all that fame and fortune just because you were not there when opportunity (literally) knocked. The only problem with this story is that it is not true. Gates was actually the first man IBM went to when they started looking for their OS, and he referred them to Kildall. Only when negotiations with Kildall stalled did IBM look to Microsoft again and the idea to buy QDOS surged. Also, the deal itself was not as definitive for Microsoft's success as people seem to think. It took many strategic moves by Gates and many blunders from the likes of IBM and Apple for Microsoft to position itself as the total leader of the industry.&lt;br /&gt;&lt;br /&gt;I had &lt;a href="http://www.businessweek.com/magazine/content/04_43/b3905109_mz063.htm"&gt;read about the real story before&lt;/a&gt;, but this weekend I read it again in a more detailed and interesting account in the book &lt;a href="http://www.insearchofstupidity.com/"&gt;In search of stupidity: over 20 years of high tech marketing disasters&lt;/a&gt;, by Merrill R. Chapman (published by Apress).&lt;br /&gt;&lt;br /&gt;One of the claims of this book is that Microsoft has kept its place at the top mainly because they haven't made a &lt;span style="font-style: italic;"&gt;really&lt;/span&gt; stupid mistake in all these years. If you think the talking paper clip, the Microsoft Network, ignoring the Internet for a long time, or [insert your favorite Microsoft blunder here] were very stupid moves, wait until you read the amazingly stupid mistakes made by companies like Micropro (Wordstar), Ashton-Tate (Dbase) and IBM, to name a few.&lt;br /&gt;&lt;br /&gt;This is a book I heartily recommend. It's funny, well written and touches on subjects that are of interest to developers and computer lovers in general.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-113091640218572567?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/113091640218572567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=113091640218572567' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/113091640218572567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/113091640218572567'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/11/day-kildall-took-flying.html' title='The day Kildall took flying'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-112969902545472569</id><published>2005-10-18T21:57:00.000-07:00</published><updated>2005-10-18T22:17:05.460-07:00</updated><title type='text'>Weblog usability mistakes</title><content type='html'>For those of us who blog frequently (ok, ok, &lt;span style="font-style: italic;"&gt;try&lt;/span&gt; to blog frequently), Jakob Nielsen, the usability guru, has posted an article about the &lt;a href="http://www.useit.com/alertbox/weblogs.html"&gt;top ten weblog usability mistakes&lt;/a&gt;. Even if you don't agree with all ten points, I think it still makes a good read.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-112969902545472569?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/112969902545472569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=112969902545472569' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112969902545472569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112969902545472569'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/10/weblog-usability-mistakes.html' title='Weblog usability mistakes'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-112959337935904568</id><published>2005-10-17T16:32:00.000-07:00</published><updated>2005-10-17T16:56:19.366-07:00</updated><title type='text'>Be more productive, buy a bigger monitor</title><content type='html'>More than once at my old job I got into an argument with the powers that be about monitor size. They were all for buying small size screen monitors that were cheaper, I insisted on getting the largest possible screens which I affirmed could improve productivity. They didn't buy my argument and, consequently, didn't buy the monitors I wanted, either.&lt;br /&gt;&lt;br /&gt;So, I never did prevail, but some vindication has arrived to me in the form of a New York Times article, &lt;a href="http://www.nytimes.com/2005/10/16/magazine/16guru.html?ex=1287115200&amp;en=c8985a80d74cefc1&amp;amp;ei=5090&amp;partner=rssuserland&amp;amp;emc=rss"&gt;Meet the life hackers&lt;/a&gt; (&lt;a href="http://37signals.com/svn/archives2/the_science_of_interruptions.php"&gt;via&lt;/a&gt;), which discusses work interruptions, the secrets of highly productive professionals and software research that tries to get the most out of an inevitably interruption-filled modern workplace. Check out this bit from page 3:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The researchers took 15 volunteers, sat each one in front of a regular-size 15-inch monitor and had them complete a variety of tasks designed to challenge their powers of concentration - like a Web search, some cutting and pasting and memorizing a seven-digit phone number. Then the volunteers repeated these same tasks, this time using a computer with a massive 42-inch screen, as big as a plasma TV.&lt;br /&gt;&lt;br /&gt;The results? On the bigger screen, people completed the tasks at least 10 percent more quickly - and some as much as 44 percent more quickly. They were also more likely to remember the seven-digit number, which showed that the multitasking was clearly less taxing on their brains.&lt;/blockquote&gt;So there, we should have bought bigger monitors that time. At least now I got&lt;span style="font-style: italic;"&gt; that&lt;/span&gt; out of my system.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-112959337935904568?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/112959337935904568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=112959337935904568' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112959337935904568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112959337935904568'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/10/be-more-productive-buy-bigger-monitor.html' title='Be more productive, buy a bigger monitor'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-112933667976081404</id><published>2005-10-14T16:43:00.000-07:00</published><updated>2005-10-14T19:38:23.730-07:00</updated><title type='text'>A visit to the infamous Zope hell</title><content type='html'>After spending a couple of weeks with my newborn baby I have returned to work and have found a couple of engagements where I have to correct bugs and create new functionality for some pretty big Zope based applications.&lt;br /&gt;&lt;br /&gt;I have been working with Zope for years and I like it, but I am now used to what we could call Zope's best practices for web development, which include creating Python products, working exclusively on the file system, testing, using version control, keeping too much logic out of page templates, documenting the system and more (check the bottom of this post for links).&lt;br /&gt;&lt;br /&gt;The problem with these applications I'm working on is that they are old school: hundreds of Python scripts and page templates all stored in the ZODB. Lots of the scripts call each other freely and there are also a bunch of javascript generating scripts which sometimes include very important pieces of business logic in them, making debugging and following the flow of the application very difficult for people unfamiliar with the code (myself!).&lt;br /&gt;&lt;br /&gt;One of the systems is fairly well laid out and to be fair was developed at a time where information about Zope best practices and Python product development was scarce. The other one, however, seems to be an adaptation of some older system for similar but not altogether equal requirements and the scripts and templates are full of commented-out code and unused logic which make finding out what's going on even harder.&lt;br /&gt;&lt;br /&gt;At least they do not include DTML, which I hate, and the scripts and templates are all organized into folders, so it's not the worst case of Zope hell I have seen, but making even simple changes becomes very difficult in systems like these.&lt;br /&gt;&lt;br /&gt;After spending some time with these systems, I can see why some people loathe Zope and call it unpythonic (well, they call it other things too but they go against my self-imposed editorial policy). It doesn't have to be like this, though. Here are a couple of links for those who are interested:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;a href="http://plone.org/Members/pupq/best-practices.pdf/view"&gt;Best practices for Plone development&lt;/a&gt;. A tutorial by Joel Burton.&lt;/li&gt;   &lt;li&gt;&lt;a href="http://www.plope.org/Members/chrism/zope_collab/view"&gt;A theory on collaborative development using Zope&lt;/a&gt;. By Chris McDonough.&lt;/li&gt;   &lt;li&gt;&lt;a href="http://www.zope.org/Members/k_vertigo/Stories/TeamZope"&gt;Team development with Zope&lt;/a&gt;. By Kapil Thangavelu.&lt;/li&gt;   &lt;li&gt;&lt;a href="http://michaelthornhill.blogspot.com/2005/08/team-development-with-plone-zope-zeo.html"&gt;Team development with Plone/Zope/ZEO/Subversion/iPython&lt;/a&gt;. By Michael Thornhill.&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-112933667976081404?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/112933667976081404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=112933667976081404' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112933667976081404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112933667976081404'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/10/visit-to-infamous-zope-hell.html' title='A visit to the infamous Zope hell'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-112863206813475789</id><published>2005-10-06T13:46:00.000-07:00</published><updated>2005-10-06T13:54:28.140-07:00</updated><title type='text'>Python and NewsML</title><content type='html'>I'm researching a little bit into the Plone newspaper project that we could be starting soon. My client wants to use a special XML format to store and manipulate news items, and so they chose &lt;a href="http://www.newsml.org/pages/index.php"&gt;NewsML&lt;/a&gt; for this purpose. I have searched the web a bit, but haven't been able to find any Python software for handling this format. I may have to create my own parser. There are libraries for &lt;a href="http://newsml-toolkit.sourceforge.net/"&gt;Java&lt;/a&gt; and &lt;a href="http://www.clueful.com.au/NewsML/README.html"&gt;Perl&lt;/a&gt;, though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-112863206813475789?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/112863206813475789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=112863206813475789' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112863206813475789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112863206813475789'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/10/python-and-newsml.html' title='Python and NewsML'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-112857728912495676</id><published>2005-10-05T22:22:00.000-07:00</published><updated>2005-10-05T22:44:47.526-07:00</updated><title type='text'>The Pragmatic Studio</title><content type='html'>So, in addition to &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/097669400X/qid=1128576159/sr=8-1/ref=pd_bbs_1/104-1507302-2275921?v=glance&amp;s=books&amp;amp;n=507846"&gt;highly placed books in the sales ranks&lt;/a&gt; (compare to any Python book and we are thousands of places away), Pragmatic Programmer Dave Thomas and company are now offering an &lt;a href="http://studio.pragprog.com/"&gt;interactive Rails Workshop&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Sometimes its very tempting to see what the hype is all about. Maybe we need personalities like this in the Python world? How about some really exciting books?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-112857728912495676?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/112857728912495676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=112857728912495676' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112857728912495676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112857728912495676'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/10/pragmatic-studio.html' title='The Pragmatic Studio'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-112857582183676908</id><published>2005-10-05T20:46:00.000-07:00</published><updated>2005-10-05T23:00:42.420-07:00</updated><title type='text'>Plone for newspapers</title><content type='html'>A newspaper with a modest budget contacted me (thanks to Alan Runyan of &lt;a href="http://www.enfoldsystems.com/"&gt;Enfold Systems&lt;/a&gt;) a couple of months ago because they want to totally rebuild their website using &lt;a href="http://www.plone.org/"&gt;Plone&lt;/a&gt;. After a couple of meetings with the client we have agreed on principle to create a full featured newspaper product for Plone, which could be used by other newspapers around the world with limited budgets and small development teams for free.&lt;br /&gt;&lt;br /&gt;I have used Plone for a couple of years now and I like it, but I have my doubts about how appropriate it would be for a newspaper project. So, before starting our work I thought maybe I should find out whether other newspapers have been using Plone. I have been unable to find one so far and the Plone guys don't know about one either. I know some newspapers use Zope, but being a CMS, I thought Plone would have its share. Anyway, here's hoping anyone that reads this and knows about a newspaper anywhere that uses Plone would leave a comment. It would be really good to hear about previous experiences of newspapers using Plone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-112857582183676908?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/112857582183676908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=112857582183676908' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112857582183676908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112857582183676908'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/10/plone-for-newspapers.html' title='Plone for newspapers'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-112804494498560539</id><published>2005-09-29T17:47:00.000-07:00</published><updated>2005-09-30T17:07:51.873-07:00</updated><title type='text'>More frameworks, taking my eyes off Python for a moment</title><content type='html'>Since I am about to more or less formally review some Python web frameworks, it seems to me that this as good a time as any to try out a couple of similar frameworks written in other languages. I like my frameworks written in a dynamic language and I really value simplicity and flexibility, which pretty much rules out .net and Java as framework languages adequate to my tastes.&lt;br /&gt;&lt;br /&gt;There are two frameworks that I have read about a lot during the last couple of months, so these are the two that I will test drive. There is no way I could earnestly say I want to check out cool dynamic frameworks and not include &lt;a href="http://www.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt; in my research, so that is my first non-Python candidate. Rails has made a lot of noise and has by far the best marketing of all the frameworks I have mentioned in my posts. Not that it is devoid of any technical merit, of course, but coming from a Python background it doesn't seem to me to be as original and groundbreaking as its proponents suggest. We'll see if it makes me change my mind.&lt;br /&gt;&lt;br /&gt;The other very interesting framework I've been wanting to try is &lt;a href="http://www.seaside.st/"&gt;Seaside&lt;/a&gt;. Written in Smalltalk, a language that I really want to learn (as opposed to Ruby, which is not that attractive to me), Seaside is a component based web framework, and is for me a lot more original than RoR. It appears to be quite powerful too.&lt;br /&gt;&lt;br /&gt;I plan to report on my experiments with these two frameworks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-112804494498560539?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/112804494498560539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=112804494498560539' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112804494498560539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112804494498560539'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/09/more-frameworks-taking-my-eyes-off.html' title='More frameworks, taking my eyes off Python for a moment'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-112804042340382486</id><published>2005-09-29T17:24:00.000-07:00</published><updated>2005-09-29T17:33:43.410-07:00</updated><title type='text'>Our baby is born, self-congratulations are in order</title><content type='html'>On Friday, September 23rd, 2005, our baby boy Carlos Rodrigo was born. He took his time, almost 42 weeks to come out of the womb, but he made up for it by being the most beautiful thing I have seen and just plain lovable. My wife was very brave before, during and after the c-section and I love her. Really, everything about this weekend was a huge success, so we are as happy as can be.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-112804042340382486?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/112804042340382486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=112804042340382486' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112804042340382486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112804042340382486'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/09/our-baby-is-born-self-congratulations.html' title='Our baby is born, self-congratulations are in order'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-112742049751786584</id><published>2005-09-22T10:13:00.000-07:00</published><updated>2005-09-22T15:56:32.570-07:00</updated><title type='text'>frameworks, magaframeworks and metaframeworks</title><content type='html'>As I am getting ready for my new web development shop (and while I get my first client), I decided to take a look at the ever changing Python web development landscape. I have been developing with Zope 2x for years and I like it a lot, but sometimes it feels more complicated than it should be, plus there have been a lot of recent developments in this front, so I thought maybe I should at least check.&lt;br /&gt;&lt;br /&gt;I recalled reading that at &lt;a href="http://www.python.org/pycon/2005/"&gt;pycon&lt;/a&gt; in march, one of the most successful presentations was Michelle Levesque's &lt;a href="http://pyre.third-bit.com/pyweb/index.html"&gt;PyWebOff&lt;/a&gt;, so that was my first stop. Sadly, the task of single handedly evaluating half a dozen or more python web frameworks &lt;a href="http://pyre.third-bit.com/pywebblog/"&gt;proved to be too much for one person&lt;/a&gt;, so right now the project is stalled. Nonetheless, it is very interesting to note that the Python web framework landscape has changed so much in the past six months that the projects considered in the PyWebOff study do not include any of the (arguably) most notable frameworks to date: &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt;, &lt;a href="http://subway.python-hosting.com/"&gt;Subway&lt;/a&gt; and &lt;a href="http://www.turbogears.org/"&gt;TurboGears&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Well, that last point was not entirely accurate, since both Subway and TurboGears use &lt;a href="http://www.cherrypy.org/"&gt;CherryPy&lt;/a&gt; as the web backend. And that brings me to another confusing point, the concept of a &lt;span style="font-style:italic;"&gt;megaframework&lt;/span&gt;. TurboGears seems to be the first project to use the term, but Subway is built on the same concept and of course &lt;a href="http://dev.catalyst.perl.org/"&gt;other languages may use it to&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But &lt;a href="http://dirtsimple.org/2005/09/whats-megaframework.html"&gt;what on earth is a megaframework&lt;/a&gt;? Well, instead of creating a new framework from scratch, a megaframework is an assembly of already existing frameworks. These frameworks usually include a layer of unifying code wrapped around a web backend, a templating engine, some kind of persistence or database backend and maybe a javascript browser frontend. Also, a simple setup procedure is very important to easily install all the required software. For this last step, &lt;a href="http://peak.telecommunity.com/DevCenter/setuptools"&gt;setuptools&lt;/a&gt; and &lt;a href="http://peak.telecommunity.com/DevCenter/EasyInstall"&gt;EasyInstall&lt;/a&gt; are popular Python solutions.&lt;br /&gt;&lt;br /&gt;So there are frameworks and megaframeworks to evaluate, but that is not all. Since there is a growing number of Python web frameworks, and no easy way to move an application from one framework to another or to interconnect applications between them, &lt;a href="http://www.python.org/peps/pep-0333.html"&gt;PEP (Python Enhancement Proposal) 333&lt;/a&gt; proposes the creation of a &lt;blockquote&gt;simple and universal interface between web servers and web applications or frameworks: the Python Web Server Gateway Interface (WSGI).&lt;/blockquote&gt; &lt;a href="http://pythonpaste.org/"&gt;Python Paste&lt;/a&gt; is what we could call a metaframework. It uses WSGI to create a framework-neutral set of components and also assists with application setup and deployment. Exactly how this helps or why anybody should implement WSGI support or use a metaframework like Paste is something I still have to fully understand. Maybe I will talk about this in another post.&lt;br /&gt;&lt;br /&gt;Considering the varied and rapidly changing landscape, it seems quite a chore to carefully analyze the many available options, but I don't think this is a bad thing at all. There are many approaches to web application development and Python is a language capable of making any of them work well, so maybe it's just a matter of taste.&lt;br /&gt;&lt;br /&gt;One final thought for today about the new wave of Python web frameworks: I really can't understand why &lt;a href="http://www.zope.org/DevHome/Wikis/DevSite/Projects/ComponentArchitecture/FrontPage"&gt;Zope 3&lt;/a&gt; seems to be entirely ignored in this respect. Zope 3 is a framework that was carefully developed taking into account the many lessons learned from Zope, which is without a doubt the most successful Python web framework to date. Zope 2 managed to get a reputation as an &lt;span style="font-style:italic;"&gt;unpythonic&lt;/span&gt; framework, so maybe Zope 3, even with its painstakingly designed component architecture, is paying for it. Or perhaps there's a lack of influential bloggers touting it as the next big thing (&lt;a href="http://www.rubyonrails.com"&gt;Rails&lt;/a&gt; anyone?) or the project's web page is so terrible that few people think it's worth checking out. Whatever the reason, I think Zope 3 should be taken into account when exploring web frameworks of the future, so I intend to look into this matter more thoroughly.&lt;br /&gt;&lt;br /&gt;Well, this is just a quick overview, but anyone can see that it's no easy task to pick &lt;span style="font-style:italic;"&gt;the&lt;/span&gt; web framework for Python. I'll try to do it, anyway.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-112742049751786584?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/112742049751786584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=112742049751786584' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112742049751786584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112742049751786584'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/09/frameworks-magaframeworks-and.html' title='frameworks, magaframeworks and metaframeworks'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-112624861106869667</id><published>2005-09-08T22:47:00.000-07:00</published><updated>2005-09-08T23:50:11.080-07:00</updated><title type='text'>A needle in a haystack</title><content type='html'>One of the things I have to do to start my new life as an independent developer is to start looking for prospective clients. That means I have to polish and update &lt;a href="http://resumes.hotjobs.com/cguardia/resume"&gt;my resume&lt;/a&gt;. Well, after spending a few minutes with it, I feel that a resume is an unfair representation of my capabilities. How can a bunch of keywords used by thousands of other developers separate me from the rest? Where in the small paragraph describing my last ten years of experience at a fairly obscure and small web development company does it show the hard lessons learned about founding and sustaining a technical business? At what point in the long list of languages and technologies I have used can one be certain that I truly understand web development? Where and how on this two short pages can I make the reader  appreciate the countless hours of learning that I have put into my career on my free time? How can they really know for sure that I have a passion for this?&lt;br /&gt;&lt;br /&gt;Of course, having a blog is a good start (but not if you have one post a year). Hopefully, someday a couple of people may read it and like what they find. Also, practicing good writing can be helpful for another thing the modern programmer should do: promote himself like crazy. Have a web site that shows off your stuff, don't be shy and don't be afraid of the 'M' word. As exemplified by &lt;a href="http://www.37signals.com"&gt;37signals&lt;/a&gt; and &lt;a href="http://www.rubyonrails.org"&gt;RoR&lt;/a&gt;, marketing can be very well used to promote yourself and your ideas, specially if you already know how cool they are.&lt;br /&gt;&lt;br /&gt;I am well aware that I am not alone in this thoughts. Just yesterday I was reading &lt;a href="http://www.loudthinking.com/arc/000505.html"&gt;this post by David Heinemeier Hansson&lt;/a&gt; about the same subject but viewed from the other end. First he tells us how he was bothered by the fact that someone once hired him on the basis of his resume, a couple of emails and a one hour interview. The worst thing is that many companies usually do just this to hire people. He says that he will only hire people he knows from open source projects and that more companies should do the same.&lt;br /&gt;&lt;br /&gt;I think he has a point there. I was not allowed to open source my work at my old job, but I intend to get involved in some open source effort as soon as I can. I really have a lot of stuff to do, which means at least for the time being I already have a client: myself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-112624861106869667?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/112624861106869667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=112624861106869667' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112624861106869667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112624861106869667'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/09/needle-in-haystack.html' title='A needle in a haystack'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-112606460366742726</id><published>2005-09-06T19:34:00.000-07:00</published><updated>2005-09-06T20:50:12.093-07:00</updated><title type='text'>A new life merits a new post</title><content type='html'>Today I signed the papers that definitely separate me from the company I helped found 10 years ago. The past few years saw my company become something very different from what me and a couple of friends wanted it to become when we started it back in 1995 and my very small share percentage after three rounds of investment was not enough to change this, so I decided to get out. &lt;br /&gt;&lt;br /&gt;My wife and I are expecting our first baby anytime during the next few days and we are deep in debt over a house we bought a couple of years ago, but hey, I am going to &lt;a href="http://chadfowler.com/index.cgi/Computing/Career/LoveItOrLeaveIt.rdoc,v"&gt;do what I love&lt;/a&gt; &lt;a href="http://www.chadfowler.com/index.cgi/Computing/Career/AnotherLoveItOrLeaveIt.rdoc,v"&gt;the way I think it should be done&lt;/a&gt; and live a happier life overall. I'm not really sure right now exactly how I will pull it off, but I am really sure about who to blame if I don't. Being your own boss means there's no one to point the finger at when you fail.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-112606460366742726?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/112606460366742726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=112606460366742726' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112606460366742726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/112606460366742726'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/09/new-life-merits-new-post.html' title='A new life merits a new post'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-111829443056456674</id><published>2005-06-08T19:33:00.000-07:00</published><updated>2005-06-08T22:20:30.576-07:00</updated><title type='text'>Smart is as smart does</title><content type='html'>A recent posting about &lt;a href="http://www.loudthinking.com/arc/000462.html"&gt;preferring simple over hard problems&lt;/a&gt; by David Heinemeier Hansson (of &lt;a href="http://www.rubyonrails.com"&gt;Rails&lt;/a&gt; fame), made me think about the way I ended up becoming a web application developer:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;I would likely not fit into the celebration of hard problems and mathematical aptitude that places like Google, Microsoft, Joel Spolsky, and others see as the filter for good programmers.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I certainly identify with this statement. After trying to study Computer Science for a term or two, I finally had to face the fact that I didn't want to spend four years dealing with hard CS problems. What I really liked was doing the stuff that was interesting to me with my computer, so I changed my major to another one that allowed me to dedicate time programming and learn whatever I found interesting and fun at the time. In the early 90's that fun thing turned out to be the web.&lt;br /&gt;&lt;br /&gt;My interests and the constant desire to have fun doing my work, lead me to Linux and later to Python and Smalltalk and dynamic languages in general. Now, David says (tongue in cheek, I'm sure) that he is not so clever because he prefers to solve the simple problems, but these comments of his made me remember a &lt;a href="http://www.paulgraham.com/pypar.html"&gt;2004 article&lt;/a&gt; by Paul Graham in which he explains why he said at some conference that you can get smarter programmers for a Python project than for a Java project:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;I didn't mean by this that Java programmers are dumb. I meant that Python programmers are smart. It's a lot of work to learn a new programming language. And people don't learn Python because it will get them a job; they learn it because they genuinely like to program and aren't satisfied with the languages they already know.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This, of course, applies as well to many dynamic languages, like Ruby and Smalltalk. So David, I'm sure you'll agree that sometimes it's smarter to be a little less smart. By using simpler tools like Ruby and Rails to solve these simple problems that you crave, you are actually helping many of us simple minded folks to solve our own simple problems, and even look (kind of) smart in the process.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-111829443056456674?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/111829443056456674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=111829443056456674' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/111829443056456674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/111829443056456674'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/06/smart-is-as-smart-does.html' title='Smart is as smart does'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-111388631096209579</id><published>2005-04-18T21:39:00.000-07:00</published><updated>2005-04-22T14:02:28.896-07:00</updated><title type='text'>Language culture and the Ruby-on-Rails phenomenon</title><content type='html'>Ruby-on-Rails has been making a lot of noise lately, and a lot has been written about that. What I find interesting, though, is the varied reactions to RoR success that the different language communities have.&lt;br /&gt;&lt;br /&gt;I follow a number of language specific blogs, and I think I at least have a decent sample of some of the web's most read bloggers in each of the Python, Java and Smalltalk communities, at least those involved in some way with web application development. For what is worth, I also follow a number of .net related blogs, but I am really not that well informed about the .net community. All I can say is that it seems from what I read that they rarely write about stuff not directly related to Microsoft development tools.&lt;br /&gt;&lt;br /&gt;The Java bloggers have written a lot about this subject. For a couple of weeks, a blog post featuring RoR was almost guaranteed daily. Most of these posts also were commented on abundantly. What I found very interesting here is that very few people seem to really, really love Java. When confronted with Rails, many Java developers assumed that to work with a tool like that, they would have to switch languages. Some proficient J2EE developers mentioned that they were considering using Rails for their next project. As an example, David Geary and Bruce Tate, both of them authors of at least two Java books, will be teaming up to write a RoR book, after Geary initially dismissed Rails as just a CRUD scaffolder. That's a heck of a conversion!&lt;br /&gt;&lt;br /&gt;Of course, a lot of Java coders were quick to dismiss RoR as a simple tool for simple web sites that never would scale. After all, they say, the first 'E' in J2EE stands for Enterprise. To them, Rails is ok for small, simple developments, but for large applications, well, only J2EE (ok, maybe also .net) is worth considering. Other than the charge that it won't scale, most arguments from this group against Rails focus on the low numbered current version (0.12.1), which to them speaks of immaturity, and the lack of static typing. It doesn't help to warm them up to RoR that David Heinemeier Hansson takes frequent shots at the J2EE community and is continually (and successfully) hyping his web framework. He also is not shy about constantly self-congratulating himself.&lt;br /&gt;&lt;br /&gt;Over at the Python community, it seems that what truly bugs us is all that popularity Rails is enjoying. Many think that there should be a single greatest solution for all our web programming needs, like RoR is characterizing itself to be in the Ruby world. The feeling is that there is nothing that Rails does that more than one Python framework can accomplish, but that we should learn from the RoR guys about neatly packaging and presenting our efforts. But other than this, few Python people see Rails as such a big threat or think it is very innovative. The Rails folks claim 10x productivity over other web frameworks, but that is clearly referring to Java or .net frameworks, since Python frameworks also posses the single most responsible element for making RoR so formidable: a powerful, object oriented, dynamic language at its core.&lt;br /&gt;&lt;br /&gt;Smalltalk web developers take it even easier than that. They applaud Rails success and are maybe just a little envious of its popularity, but they know that the key element there is Ruby's dynamic nature and in that regard they consider Smalltalk superior. Besides, one of the truly innovative web frameworks right now, Seaside, is done in Smalltalk. One thing is for sure, this crowd really love their language.&lt;br /&gt;&lt;br /&gt;I think it is no coincidence that dynamic language programmers, even if they see in Rails a nice example of a web framework and perhaps something to emulate in their own languages, seldom consider a switch of development language or feel as insulted and threatened by Rails as their Java and .net counterparts. We know that what really makes us productive is the language underneath the framework.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-111388631096209579?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/111388631096209579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=111388631096209579' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/111388631096209579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/111388631096209579'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/04/language-culture-and-ruby-on-rails.html' title='Language culture and the Ruby-on-Rails phenomenon'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-111387555881328885</id><published>2005-04-18T18:41:00.000-07:00</published><updated>2005-04-18T19:42:31.153-07:00</updated><title type='text'>Out of shape</title><content type='html'>I have been gaining weight lately. I don't feel I'm eating too much, but too little exercise and too much sitting in front of a computer reading blogs does this to you. Today I decided to go for a jog. I ran for about 10-15 minutes; took me 45 to get my breath back. I'm closing in on forty and feeling it. But I intend to persevere.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-111387555881328885?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/111387555881328885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=111387555881328885' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/111387555881328885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/111387555881328885'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/04/out-of-shape.html' title='Out of shape'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-111359704321626556</id><published>2005-04-15T13:28:00.000-07:00</published><updated>2005-04-17T21:40:46.130-07:00</updated><title type='text'>Compiling DCOracle2 for Oracle 10g</title><content type='html'>I finally decided to bite the bullet and find out how to compile DCOracle2 with the Oracle 10g client libraries. Turns out it wasn't that difficult, all I needed to do was to change all three occurrences of the word "dword*" to "dvoid*" (I learned about the required changes from &lt;a href="http://www.gossamer-threads.com/lists/zope/db/177133"&gt;this post&lt;/a&gt; from the Zope DB list) and then it compiled without problems. To avoid further connection problems, it is best to install Oracle's client libraries with the same user that the Zope instance has assigned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-111359704321626556?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/111359704321626556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=111359704321626556' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/111359704321626556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/111359704321626556'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/04/compiling-dcoracle2-for-oracle-10g.html' title='Compiling DCOracle2 for Oracle 10g'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-111350243620241878</id><published>2005-04-14T10:41:00.000-07:00</published><updated>2005-04-14T16:58:11.716-07:00</updated><title type='text'>Database adapter trouble in Zope land</title><content type='html'>My company recently worked out an agreement with Oracle to port some of our products to the Oracle Database and I was assigned to the project. After examining the involved applications, I was happy to find out that the changes to the SQL used in them were few and prepared myself to do the work and finish it as soon as possible.&lt;br /&gt;&lt;br /&gt;It turns out that the work was harder than expected, not because of the code, but because of the lack of a decent adapter for the Oracle Database. We need to use Oracle 10g for this project and &lt;a href="http://www.zope.org/Members/matt/dco2"&gt;DCOracle2&lt;/a&gt;, the only Zope DA that can work with a version of oracle higher than 7, is not being developed at the moment and the last update came in 2003. That means it doesn't work with versions of Oracle greater than 8. Well, according to what some people say on the mailing lists it can be made to work, but you have to tinker with the make file.&lt;br /&gt;&lt;br /&gt;I am not sure I want to invest a lot of time fighting with the DCOracle2 setup, specially since opinions at the Zope DB mailing list lead me to believe that it is somewhat buggy and has trouble supporting some features. There is another adapter for Python, &lt;a href="http://www.computronix.com/utilities.shtml"&gt;cx_oracle&lt;/a&gt;, and this one works with Oracle 10, but there is no DB adapter for Zope. I decided I would at least find out how hard it would be to write a Zope DA for cx_oracle, but it turns out that there is almost no information on that subject. If you search the zope.org site you get no results for this (which is kind of odd because the one article that I finally found was there), but if you are patient and dig into the mailing lists you can find an &lt;a href="http://www.zope.org/Members/petrilli/WritingADA"&gt;introduction to writing a DA&lt;/a&gt;, authored (I think) by Chris Petrilli. These seems to be the only information available on the subject.&lt;br /&gt;&lt;br /&gt;I decided writing my own DA would not be a good idea for this project, given my time constraints, so my other option is to use an ODBC adapter instead. There is a ZODBC adapter available from Zope, but it is Windows only and also unmaintained. The only other option is &lt;a href="http://www.egenix.com/files/python/mxODBC-Zope-DA.html"&gt;mxODBC Zope DA&lt;/a&gt;, a commercial adapter by Egenix. It seems to be a good solution to the problem, but it requires an existing ODBC driver. That's certainly no problem in Windows, but for Linux you probably need another commercial  product, so the cost is not small.&lt;br /&gt;&lt;br /&gt;Anyway, we'll have to make a decision this week, so maybe we'll have to go the commercial route. I just thought by now Zope would have better solutions for this problem, so I am a bit disappointed. Part of the problem is the fact that even if there is an adequate open source solution for Python (which is the case here with Oracle but not with ODBC), there still needs to be a separate solution written for Zope's DA interface. Of course if we use a DA we get automatic transaction support and more from Zope's machinery, so I can't really complain, since I could theoretically modify my software to work directly from Python without using Zope's DAs (but if that's worth it, why use Zope at all?). Also, given that Zope Corporation is a consulting company, they have a lot of pressure to make their developers work on tools that their clients require, not on community member wishes, so I totally understand their decision to stop supporting DA's.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-111350243620241878?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/111350243620241878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=111350243620241878' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/111350243620241878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/111350243620241878'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/04/database-adapter-trouble-in-zope-land.html' title='Database adapter trouble in Zope land'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-111317138137219035</id><published>2005-04-10T15:15:00.000-07:00</published><updated>2005-04-10T15:16:44.803-07:00</updated><title type='text'>Squeak or VisualWorks</title><content type='html'>I have decided to take a closer look at &lt;a href="http://www.seaside.st/"&gt;Seaside&lt;/a&gt;. I plan to write some application with it to learn Smalltalk and at the same time see if Seaside can be my web application server of the future. My problem now is figuring out which version of Smalltalk I should use for this. My two candidates right now are &lt;a href="http://smalltalk.cincom.com/prodinformation/index.ssp?content=vwfactsheet"&gt;Cincom VisualWorks&lt;/a&gt; and &lt;a href="http://www.squeak.org/"&gt;Squeak&lt;/a&gt;. I want cross platform capabilities, so &lt;a href="http://www.object-arts.com/Products.htm"&gt;Dolphin&lt;/a&gt; and Cincom's Object Studio are out. If I missed any important candidate please let me know.&lt;br /&gt;&lt;br /&gt;VisualWorks is a commercial product, but you can download a non-commercial version that includes everything. VW is intended for business use, so you get a lot of tools for stuff like database access and COM support. It comes with excellent documentation and includes first rate development tools. Squeak is a free product and has an active user community, it is also the environment on which Seaside was developed.&lt;br /&gt;&lt;br /&gt;I have downloaded both of these environments and will post some of my experiences with them here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-111317138137219035?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/111317138137219035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=111317138137219035' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/111317138137219035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/111317138137219035'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/04/squeak-or-visualworks_10.html' title='Squeak or VisualWorks'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-111283355807569406</id><published>2005-04-06T17:15:00.000-07:00</published><updated>2005-04-09T21:54:05.706-07:00</updated><title type='text'>A little hype never hurt anybody</title><content type='html'>Just a day after I posted &lt;a href="http://cguardia.blogspot.com/2005/04/where-is-zope-going-and-will-we-go.html"&gt;this&lt;/a&gt;, &lt;a href="http://faassen.n--tree.net/blog/view/weblog"&gt;Martijn Faassen&lt;/a&gt; has some &lt;a href="http://faassen.n--tree.net/blog/view/weblog/2005/04/06/0"&gt;interesting things&lt;/a&gt; to say about the lack of attention from the Python developer community to the Zope 3 project:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;If we want Zope 3 to be popular, what we need to do is learn the lesson of Plone, learn the lesson of Ruby on Rails, and do presentation well, and attract new people, from outside the immediate Python community, to Zope.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I couldn't agree more. In my experience, even &lt;a href="http://www.plone.org/"&gt;Plone&lt;/a&gt;, with its clean and polished look, seems boring and plain to many would be users, but it is clearly the best positioned Zope product right now. I really have heard this claim of a boring design more than once: "Why does every Plone site look the same?", but if you stop to think of it, this is really a compliment to the &lt;a href="http://plone.org/about/team/"&gt;Plone design team&lt;/a&gt;. The Plone look is attractive enough that many users just install their portal and put their logo at the top and then consider it done.&lt;br /&gt;&lt;br /&gt;So, a lot of its popularity has to do with the attractive design, but another factor that Plone has in its favor is the user friendly setup executable that allows aspiring content managers to have a fully working (and also clean looking) site in a matter of minutes, together with their cool Windows Plone control panel which lets casual users stay away from configuration files. That's a lesson not lost on the Ruby on Rails camp either, witness their &lt;a href="http://media.nextangle.com/rails/rails_setup.mov"&gt;10 minute setup video&lt;/a&gt;. Since learning a development tool really well (even Rails) requires a heavy time investment, you need a quick hook, a gimmick if you wish, to attract a huge prospective audience to that first try. When the hype calms down and the cloud of smoke disappears, what you have left is a user community.&lt;br /&gt;&lt;br /&gt;As of now, Zope 3 doesn't seem to have something like this. If anything, its &lt;a href="http://hathawaymix.org/Weblog/2005-01-26"&gt;XML based configuration&lt;/a&gt; and what to some developers feels like an excessively academic stance on web development, plus the admittedly psychological factor of the memory of Zope 2's huge learning curve, make it seem somewhat daunting to learn.&lt;br /&gt;&lt;br /&gt;Anyway, I think it would help Zope 3 a lot to have an easy way to create a first application, automatically generating the required configuration files. That and a cool web site to hype it like crazy all over the net.&lt;br /&gt;&lt;br /&gt;I really haven't looked into Zope 3 very deeply, other than read the &lt;a href="http://www.zope.org/DevHome/Wikis/DevSite/Projects/ComponentArchitecture/FrontPage/Zope3Book"&gt;online book&lt;/a&gt; written by &lt;a href="http://www.zope.org/Wikis/DevSite/Projects/ComponentArchitecture/StephanRichter"&gt;Stephan Richter&lt;/a&gt;, and the very interesting comments about it made by various Zope and Python luminaries. Still, I think that the lessons learned over nearly 10 years of BOBO/Principia/Zope development and applied to this web development platform by the Zope 3 development team, will result in a very powerful piece of software. I intend to look at Zope 3 in more detail in the next couple of months and post about that in this blog, just in case anyone reading this is interested.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-111283355807569406?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/111283355807569406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=111283355807569406' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/111283355807569406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/111283355807569406'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/04/little-hype-never-hurt-anybody.html' title='A little hype never hurt anybody'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-111274830441760539</id><published>2005-04-05T17:35:00.000-07:00</published><updated>2005-04-06T17:31:03.116-07:00</updated><title type='text'>Where is Zope going and will we go there too?</title><content type='html'>I discovered &lt;a href="http://www.zope.org/"&gt;Zope&lt;/a&gt; and Python in 2000 and started using them for our company's projects almost immediately. Until then, we had used Perl for most of our web sites, but the only real Perl hacker we had was no longer with us. We had used PHP for a number of internal projects with mixed results. We also had used Java heavily for a desktop application (I know, there's nothing I can say in my defense) and I was very disappointed with it.&lt;br /&gt;&lt;br /&gt;In those days, DTML (Zope's templating language) was the preferred way to develop web applications in Zope. Well, maybe not the preferred way, but the only semi-documented one. So we began to create web sites with it and gained some expertise in Zope development.&lt;br /&gt;&lt;br /&gt;Over the years, we began to slowly switch from building simple web sites to full fledged web applications. At the same time, we began phasing out DTML in favor of the new Zope Page Templates and dabbling a little with pure Python products. We also began moving code out of the ZODB (Zope's object oriented database) and into the file system. Like &lt;a href="http://blog.ianbicking.org/what-really-makes-rails-work.html"&gt;other web developers&lt;/a&gt;, we really learned Python mainly because Zope was built with it, but looking back I now think it is maybe Zope's greatest asset.&lt;br /&gt;&lt;br /&gt;Today our style of development is close to what could be described as Zope best practices. We develop full Python file system based products, use Subversion for version control, document our code with Epydoc and clearly separate the view from the logic using ZPT and its macro support.&lt;br /&gt;&lt;br /&gt;However, the time has come when it may be necessary for us to change paths. Zope is near a crossroads with &lt;a href="http://dev.zope.org/Zope3"&gt;version 3&lt;/a&gt; almost out the door but apparently not many current developers planning to switch very soon. Meanwhile, Ruby has been gaining the spotlight with its &lt;a href="http://www.rubyonrails.com/"&gt;Rails web development framework&lt;/a&gt;. Rails seems to have a huge advantage over Zope in ease of use, specially for first time developers. It has also generated a lot of hype, perhaps a bit unfairly to such a well thought out project as Zope 3. Of course Rails is not the only cool web development technology out there. It certainly isn't the most innovative either. For my money, &lt;a href="http://www.seaside.st/"&gt;Seaside&lt;/a&gt;, a web development framework for Smalltalk, is the most interesting and innovative tool on the radar.&lt;br /&gt;&lt;br /&gt;Basically then, those are my three candidates for web development framework of the future at our company. Zope 3, Rails or Seaside. Of course, it could also be a wise decision to stick with Zope 2 for the time being. What I would really hate to do, though I know it is a distinct possibility because of market forces and current management here, is to switch to J2EE development. That's why I want to take these other tools for a ride before it's too late. I better start learning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-111274830441760539?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/111274830441760539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=111274830441760539' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/111274830441760539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/111274830441760539'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/04/where-is-zope-going-and-will-we-go.html' title='Where is Zope going and will we go there too?'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11598265.post-111216519478814799</id><published>2005-03-29T22:40:00.000-08:00</published><updated>2005-04-05T22:36:39.863-07:00</updated><title type='text'>First post</title><content type='html'>I've been involved in web application development for over 10 years. The web development company a few school buddies and myself created in Mexico in 1995 is miraculously still alive, though every year I'm convinced it is our last one. We've been an unusual company (in both the good and the bad sense of the word) and I think I have a few interesting things to say.&lt;br /&gt;&lt;br /&gt;For the last year, I have been an avid blog reader and each day I feel the itch to write my own blog more and more. So here it is. I hope somebody else than me will be reading this some day, but it will be fun anyway.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11598265-111216519478814799?l=cguardia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cguardia.blogspot.com/feeds/111216519478814799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11598265&amp;postID=111216519478814799' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/111216519478814799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11598265/posts/default/111216519478814799'/><link rel='alternate' type='text/html' href='http://cguardia.blogspot.com/2005/03/first-post.html' title='First post'/><author><name>Carlos de la Guardia</name><uri>http://www.blogger.com/profile/00752760795027275896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
