<?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-7907246</id><updated>2012-01-28T06:09:11.306-08:00</updated><title type='text'>Python Notes</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>44</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7907246.post-116923278047684016</id><published>2007-01-19T10:53:00.000-08:00</published><updated>2007-01-19T10:53:01.916-08:00</updated><title type='text'>Why I stopped coding - and why I would like to do it again</title><summary type='text'>Sometimes I wonder why I stopped coding. No,the above mentioned link isn't about me, but I couldn't state it better than this. I feel that I miss today the drive to just "fuss around" with stuff. Now I want to get things done, and little things that get in the way really break the flow.Besides the database issues that the article describes so well right on the first page, there is another one </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/116923278047684016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=116923278047684016' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/116923278047684016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/116923278047684016'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2007/01/why-i-stopped-coding-and-why-i-would.html' title='Why I stopped coding - and why I would like to do it again'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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-7907246.post-113235166186308615</id><published>2005-11-18T14:07:00.000-08:00</published><updated>2005-11-18T14:07:41.906-08:00</updated><title type='text'>PyKaraoke - Karaoke for Linux</title><summary type='text'>This is a new project that goes along with my latest sound explorations... I just saw the announcement of PyKaraoke 0.4. PyKaraoke is a karaoke player, written in Python, of course. I'll check you and write about it over the course of this weekend.</summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/113235166186308615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=113235166186308615' title='87 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/113235166186308615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/113235166186308615'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2005/11/pykaraoke-karaoke-for-linux.html' title='PyKaraoke - Karaoke for Linux'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>87</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-113137712459531410</id><published>2005-11-07T07:25:00.000-08:00</published><updated>2005-11-07T07:25:24.643-08:00</updated><title type='text'>The Linux Sound Font Manager Project</title><summary type='text'>After a long time without writing any code... and thus without writing anything in this very blog... I'm finding some time to write code again, now for my personal use. The Linux Sound Font Manager is a new project, aimed a making it easier for a user to add, test, or remap sound fonts. It's part of my ongoing battle with multimedia in Linux.Why does Linux need a Sound Font Manager? There are </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/113137712459531410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=113137712459531410' title='115 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/113137712459531410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/113137712459531410'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2005/11/linux-sound-font-manager-project.html' title='The Linux Sound Font Manager Project'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>115</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-111533896686747035</id><published>2005-05-05T17:22:00.000-07:00</published><updated>2005-05-05T17:22:46.933-07:00</updated><title type='text'>Living with Javascript</title><summary type='text'>It's nice to be back after a couple months of unrelated work... let's start catching up, a lot of interesting things are going on the Python world.First of all, there is a interesting discussion going on the Python Web SIG regardingJavaScript libraries. After a long thread discussing why everyone else loves Rails (which is something that really makes many Python programmers envy!), we're </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/111533896686747035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=111533896686747035' title='134 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/111533896686747035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/111533896686747035'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2005/05/living-with-javascript.html' title='Living with Javascript'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>134</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-111084891815721719</id><published>2005-03-14T17:08:00.000-08:00</published><updated>2005-03-14T17:38:59.263-08:00</updated><title type='text'>RAD style programming for web apps</title><summary type='text'>It's nearly one month since I posted my last rant here. I was very busy, and working on a lot of different stuff, so I did not really had time to get my hands on code. But the forced rest was good, because it allowed me to take some time to investigate some of the underlying ideas that were bothering for long.I was a relative early adopter of the then-called event driven programming, when the </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/111084891815721719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=111084891815721719' title='87 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/111084891815721719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/111084891815721719'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2005/03/rad-style-programming-for-web-apps.html' title='RAD style programming for web apps'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>87</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-110893911214507351</id><published>2005-02-20T14:38:00.000-08:00</published><updated>2005-02-20T14:38:32.146-08:00</updated><title type='text'>A curious remark about code structure in Python</title><summary type='text'>Python never ceases to surprise me. Today I noticed something really simple; it's one of those  things that can go on unnoticed for ages, but make the code read better.When coding in several other languages -- C, C  or Delphi -- there's the need to declare things before using them. As a consequence, class declarations tend to be organized to satisfy this restriction (of course, there are </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110893911214507351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110893911214507351' title='175 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110893911214507351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110893911214507351'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2005/02/curious-remark-about-code-structure-in.html' title='A curious remark about code structure in Python'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>175</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-110873669799937972</id><published>2005-02-18T05:51:00.000-08:00</published><updated>2005-02-18T08:14:39.856-08:00</updated><title type='text'>Trac is great!</title><summary type='text'>Well. I may be exaggerating a little bit, but for people like me that easily get lost in the transition from the big picture into the details of the software, Trac is a great tool. My initial experience with Trac was due to the CherryPy project, that adopted it a while ago. Later, I participated in a private project that also relied on Trac for documentation and ticket management. It's a great </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110873669799937972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110873669799937972' title='94 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110873669799937972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110873669799937972'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2005/02/trac-is-great.html' title='Trac is great!'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>94</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-110864375448247730</id><published>2005-02-17T04:13:00.000-08:00</published><updated>2005-02-17T04:49:47.403-08:00</updated><title type='text'>PC virtualization is coming to age</title><summary type='text'>Well, this is not exactly a post about Python, but it relates a lot to my development experiences. I've been interested in PC virtualization techniques for a long time. I was an early user of VMWare, back when the license (and the price) were not so restrictive. I followed projects such as Bochs, which is a fine piece of software, but it's too slow for practical use; and later Plex86, that for </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110864375448247730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110864375448247730' title='57 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110864375448247730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110864375448247730'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2005/02/pc-virtualization-is-coming-to-age.html' title='PC virtualization is coming to age'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>57</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-110756967589412269</id><published>2005-02-04T18:14:00.000-08:00</published><updated>2005-02-04T18:14:35.893-08:00</updated><title type='text'>What's the U in URI?</title><summary type='text'>It's nice when one finds someone else talking about something that's seemingly evading his own understanding. Permanent URIs (or URLs, for old hats like myself) are one such a beast, at least for me. Roberto de Almeida wrote a good article on URLs for blogs a little while ago. I only found the link today but it still reads fresh. It helped me to organize my thoughts on this subject in some </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110756967589412269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110756967589412269' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110756967589412269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110756967589412269'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2005/02/whats-u-in-uri.html' title='What&apos;s the U in URI?'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-110691245860821840</id><published>2005-01-28T03:40:00.000-08:00</published><updated>2005-01-28T03:43:42.543-08:00</updated><title type='text'>Eat your own dog food</title><summary type='text'>Ian Bicking has summed up pretty well what's the problem with documentation, by large: "Tell me what to do, please". Going down this road, I have some suggestions to offer.Every framework author should eat his own dog food. Most of them do... but 'cheat'; they sprinkle some salt over it, so it doesn't taste so bad. Sometimes they feel that it's not enough and drink a wine while using it too. Of </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110691245860821840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110691245860821840' title='68 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110691245860821840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110691245860821840'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2005/01/eat-your-own-dog-food.html' title='Eat your own dog food'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>68</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-110684049811439901</id><published>2005-01-27T07:41:00.000-08:00</published><updated>2005-01-27T08:50:40.383-08:00</updated><title type='text'>Reinventing the wheel</title><summary type='text'>We coders have a strange standing on reinventing the wheel. Most of the time, a programmer will agree that he should reuse code. It's plain logical. So when we see someone baking his own library we say, 'why don't you use library X'? It usually leads to a heated argument as the programmer in question can't justify his reasons to write a new library instead of reusing something that works (at </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110684049811439901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110684049811439901' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110684049811439901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110684049811439901'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2005/01/reinventing-wheel.html' title='Reinventing the wheel'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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-7907246.post-110634550631587708</id><published>2005-01-24T13:54:00.000-08:00</published><updated>2005-01-28T08:26:00.070-08:00</updated><title type='text'>Storing persistent classes with SQLObject</title><summary type='text'>I've been playing with extensions to store persistent classes and custom methods using SQLObject. The need arised as I was trying to write a relational representation of the Petri net model for a business framework. The standard model boasts few basic concepts (basically speaking, transitions, places, tokens and arcs). The relationship between the entities is simple, and easy to map with </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110634550631587708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110634550631587708' title='33 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110634550631587708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110634550631587708'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2005/01/storing-persistent-classes-with.html' title='Storing persistent classes with SQLObject'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>33</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-110643955143360679</id><published>2005-01-23T16:03:00.001-08:00</published><updated>2005-01-22T16:19:11.433-08:00</updated><title type='text'>Low level networking: performance issues</title><summary type='text'>I spent a few hours working on a multicast file transfer program, written in Python, with a friend of mine. The experience was filled with ups and downs. It was good to see that we were able to handle low level stuff such as broadcast packets, for example, in Python. On the other hand, two things were a problem from the start: timing, and raw performance.Timing problems surfaced out as we were </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110643955143360679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110643955143360679' title='38 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110643955143360679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110643955143360679'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2005/01/low-level-networking-performance_23.html' title='Low level networking: performance issues'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>38</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-110633157528394571</id><published>2005-01-21T09:51:00.000-08:00</published><updated>2005-01-22T08:14:02.573-08:00</updated><title type='text'>What's the fuss about Rails?</title><summary type='text'>Ruby on Rails is making a lot of noice these days. I first heard about it on comp.lang.python, where it was mentioned a few times. Later, I noticed how many people wanted to write an application on Rails. And this weekend, it has made it to Slashdot home page. That's attention. Rails is already Ruby's killer application.Rails has appeared in a very interesting moment. First it was Perl, and </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110633157528394571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110633157528394571' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110633157528394571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110633157528394571'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2005/01/whats-fuss-about-rails.html' title='What&apos;s the fuss about Rails?'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-110632354365951925</id><published>2005-01-21T07:56:00.000-08:00</published><updated>2005-01-22T06:50:36.610-08:00</updated><title type='text'>Inheritance in SQLObject</title><summary type='text'>There's a debate going on about the best way to support inheritance in SQLObject. Better to have this discussion now than never; there is demand for this feature, but there's still no consensus on the best way to do it.Based on a patch initially offered by Daniel Savard, Oleg Broytmann started last November and maintained a private inheritance branch, and got it working with some patches </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110632354365951925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110632354365951925' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110632354365951925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110632354365951925'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2005/01/inheritance-in-sqlobject.html' title='Inheritance in SQLObject'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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-7907246.post-110588761551852024</id><published>2005-01-16T07:00:00.000-08:00</published><updated>2005-01-16T07:09:05.803-08:00</updated><title type='text'>Low-level networking with Python</title><summary type='text'>If for any reason you ever need to write low-level network protocols, and if you need direct access to the wire, a good starting pointer is on the Vaults of Parnassus Networking section. It contains pointers to some implementations of the libpcap library, the de-facto standard for low level network access. There is also a free port of libpcap for Windows, named WinPcap.The reason to use libpcap</summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110588761551852024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110588761551852024' title='24 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110588761551852024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110588761551852024'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2005/01/low-level-networking-with-python.html' title='Low-level networking with Python'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>24</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-110574272214739311</id><published>2005-01-14T14:45:00.000-08:00</published><updated>2005-01-14T15:07:50.950-08:00</updated><title type='text'>Deploying distributed applications</title><summary type='text'>Developing a strategy for application deployment is always hard. Every environment has its own characteristics. It's far easier to see the problem with popular applications that are installed by the end user. Custom applications are sometimes installed by an expert; sometimes the developer himself is available to do it. This helps to make the difficulty of this task to be greatly underestimated. </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110574272214739311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110574272214739311' title='41 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110574272214739311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110574272214739311'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2005/01/deploying-distributed-applications.html' title='Deploying distributed applications'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>41</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-110494129120186514</id><published>2005-01-05T08:08:00.000-08:00</published><updated>2005-01-14T15:35:17.136-08:00</updated><title type='text'>Concepts &amp; Generic Programming</title><summary type='text'>On a recent thread on comp.lang.python (which originally discussed some perceived problems about Python evolution, the topic of generic programming was brought up by Roman Suzi. In ensuing debate, there were some great posts, specially one by Alex Martelli (once again), where he goes into detail to explain why Python interfaces are different. Roman wrote a great followup to it, pointing out that </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110494129120186514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110494129120186514' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110494129120186514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110494129120186514'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2005/01/concepts-generic-programming.html' title='Concepts &amp; Generic Programming'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-110476614022761041</id><published>2005-01-03T07:29:00.000-08:00</published><updated>2005-01-03T07:41:10.376-08:00</updated><title type='text'>Large scale small projects, Part I</title><summary type='text'>Integrating teams isn't an easy task. There's much written about it, and it's usually one of the major complaints in  management. Software development teams are no exception to this rule. But until recently, most projects could be split in two relatively well-defined classes: small (and thus more manageable) projects, and big projects. Big projects impose such a management overhead that they can </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110476614022761041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110476614022761041' title='26 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110476614022761041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110476614022761041'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2005/01/large-scale-small-projects-part-i.html' title='Large scale small projects, Part I'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>26</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-110312953310742835</id><published>2004-12-15T08:52:00.000-08:00</published><updated>2004-12-15T08:52:13.106-08:00</updated><title type='text'>XML is not the question</title><summary type='text'>A quote  from the Python Is Not Java article (great reading, btw):XML is not the answer. It is not even the question. To paraphrase Jamie Zawinski on regular expressions, "Some people, when confronted with a problem, think “I know, I’ll use XML.” Now they have two problems."</summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110312953310742835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110312953310742835' title='33 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110312953310742835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110312953310742835'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/12/xml-is-not-question.html' title='XML is not the question'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>33</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-110312026423700670</id><published>2004-12-15T06:17:00.000-08:00</published><updated>2004-12-15T06:17:44.236-08:00</updated><title type='text'>Flow Based Programming &amp; the new Python coding style</title><summary type='text'>Since being introduced in the language, generators (and their lesser cousins, list comprehensions) are finally making it into the community mindset. In the long term, I think that this change will have a lasting effect on the way we write Python programs.In the beginning, Python was a conventional scripting language that happened to have a exceptionally clean syntax and a solid object model. So</summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110312026423700670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110312026423700670' title='116 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110312026423700670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110312026423700670'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/12/flow-based-programming-new-python.html' title='Flow Based Programming &amp; the new Python coding style'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>116</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-110306675997883682</id><published>2004-12-14T15:25:00.000-08:00</published><updated>2004-12-14T15:30:55.723-08:00</updated><title type='text'>Forget the GUI (long live the GUI!)</title><summary type='text'>There was a time, not a really long ago, when business programming meant basically processing data. The visual interface options were really limited, so much more time was spent in the business logic than in the UI part of the system. Now times have changed for better, and GUIs are the norm; in fact, it's so common place now as to make one wonder how were things done before. For many programmers,</summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110306675997883682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110306675997883682' title='56 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110306675997883682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110306675997883682'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/12/forget-gui-long-live-gui.html' title='Forget the GUI (long live the GUI!)'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>56</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-110150496202575054</id><published>2004-11-26T13:38:00.000-08:00</published><updated>2004-11-26T14:46:43.983-08:00</updated><title type='text'>A simple protocol for data synchronization between objects</title><summary type='text'>What follows can't still be considered a definite version of this idea. It's still a prototype of an idea that I have been working on in a rather fuzzy way, to solve a practical problem that arised as I started to used templates and a declarative style approach to model business entities. Consider it as an attempt to write it down to clarify things for myself; if you find it useful, or at least </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110150496202575054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110150496202575054' title='45 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110150496202575054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110150496202575054'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/11/simple-protocol-for-data.html' title='A simple protocol for data synchronization between objects'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>45</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-110123339342767448</id><published>2004-11-23T09:35:00.000-08:00</published><updated>2004-11-23T10:09:53.426-08:00</updated><title type='text'>References on workflow modelling</title><summary type='text'>There are a number of resources about workflow on the Internet. Finding the good ones is not that easy, though. First of all, the search term is too generic (Google found nearly 8 million results for it alone). There are a number of commercial offerings with little or no info on their web pages, besides mentioning "workflow" as one of the features. The academic sources are, for the most part, </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110123339342767448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110123339342767448' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110123339342767448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110123339342767448'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/11/references-on-workflow-modelling.html' title='References on workflow modelling'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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-7907246.post-110069902952594691</id><published>2004-11-17T04:49:00.000-08:00</published><updated>2004-11-17T05:50:52.850-08:00</updated><title type='text'>What is adaptation?</title><summary type='text'>This document was originally posted as a reply to a c.l.py post asking for more information on adaptation vs type checking for Python. It was well received, and I thought it deserved a spot here. This is a revised edition, with more information and some clarifications.Adaptation is the act of taking one object and making it conform to a given protocol (or interface). Adaptation is the key to </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110069902952594691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110069902952594691' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110069902952594691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110069902952594691'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/11/what-is-adaptation.html' title='What is adaptation?'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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-7907246.post-110065395214100223</id><published>2004-11-16T16:10:00.000-08:00</published><updated>2004-11-16T17:12:32.140-08:00</updated><title type='text'>A dynamic class repository</title><summary type='text'>As part of my workflow project, I came across an interesting problem. Transition entities are modelled as classes derived from a base ActionDef class, because each action in the system needs to have its own custom code. As the system grows, I needed to design a repository for such classes.The easy way to implement the repository is to put everything inside a package. It's reasonably scalable; a</summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110065395214100223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110065395214100223' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110065395214100223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110065395214100223'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/11/dynamic-class-repository.html' title='A dynamic class repository'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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-7907246.post-110018567085530199</id><published>2004-11-11T06:52:00.000-08:00</published><updated>2004-11-11T07:07:50.856-08:00</updated><title type='text'>News on my Python development environment setup</title><summary type='text'>It's been about two months since I started rebuilding my development environment using only free tools. For a long time, I was stuck in the search for a good IDE. It took me a while to figure out that I was not missing the IDE, but a set of good project management tools. Once I realized it, I could find several good code editors that supported my basic requirements: the ability to create projects</summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110018567085530199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110018567085530199' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110018567085530199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110018567085530199'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/11/news-on-my-python-development.html' title='News on my Python development environment setup'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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-7907246.post-110017987472481008</id><published>2004-11-11T04:54:00.000-08:00</published><updated>2004-11-11T05:31:14.723-08:00</updated><title type='text'>Alternative database systems</title><summary type='text'>There was a time when a database meant a flat file, fixed record repository. Indexes were added later, bringing better performance for several tasks. During the sixties, hierarchical database systems were developed, allowing to model complex real-life structures better. Even today, old-style mainframe systems (such as IBM's IMS) are still in production, managing huge databases. SQL was only </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/110017987472481008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=110017987472481008' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110017987472481008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/110017987472481008'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/11/alternative-database-systems.html' title='Alternative database systems'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-109827497448157146</id><published>2004-10-20T05:20:00.000-07:00</published><updated>2004-10-20T05:22:54.483-07:00</updated><title type='text'>Inifile: an ini-style configuration template</title><summary type='text'>IniFile is a ini-style configuration module that uses a template to define the configuration file structure. The code below includes some samples. Feel free to use as-is."""inifile.pyLibrary for reading and writing ini-style config files. The ini filestructure is provided as a class, with nested classes acting as thesections.Usage:    # declare the ini file structure using a class </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/109827497448157146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=109827497448157146' title='24 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109827497448157146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109827497448157146'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/10/inifile-ini-style-configuration.html' title='Inifile: an ini-style configuration template'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>24</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-109827299547759202</id><published>2004-10-20T04:42:00.000-07:00</published><updated>2004-10-20T04:54:11.466-07:00</updated><title type='text'>MetaTemplate: Generic data templates in pure Python</title><summary type='text'>I'm happy to announce that the metatemplate module is now sufficiently mature for a beta-quality release. I've been using it for my own projects over the past few weeks. The latest changes involved cleaning the code, and the addition of a new __attr__ private member to the template which allows to map alternative names to Python names. This feature was needed to allow template attributes to be </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/109827299547759202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=109827299547759202' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109827299547759202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109827299547759202'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/10/metatemplate-generic-data-templates-in.html' title='MetaTemplate: Generic data templates in pure Python'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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-7907246.post-109717243142896530</id><published>2004-10-07T10:51:00.000-07:00</published><updated>2004-10-07T11:07:11.430-07:00</updated><title type='text'>Publishing classes or instances?</title><summary type='text'>Python is an excellent language for web development, as it can be easily verified by the number of options when it comes to web-enabled frameworks. Most frameworks implement a object publisher -- a piece of software that finds the correct object and activates it upon request. Each object is 'published', or associated with some part of the site. All object publishers -- or at least, all that I'm</summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/109717243142896530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=109717243142896530' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109717243142896530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109717243142896530'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/10/publishing-classes-or-instances.html' title='Publishing classes or instances?'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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-7907246.post-109700120555632421</id><published>2004-10-05T10:51:00.000-07:00</published><updated>2004-10-05T12:32:53.210-07:00</updated><title type='text'>Generic template classes in Python</title><summary type='text'>It's been a while since this blog was last updated. And it has a good reason. I've been working with code to allow the expression of complex data structures using Python classes. This project was started as an experiment for data-entry forms, and is now reaching a quite usable state. This is controversial stuff; some people argue that this is only a obfuscation, and that the same results can be </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/109700120555632421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=109700120555632421' title='225 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109700120555632421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109700120555632421'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/10/generic-template-classes-in-python.html' title='Generic template classes in Python'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>225</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-109561907219716149</id><published>2004-09-19T11:13:00.000-07:00</published><updated>2004-09-19T11:37:52.196-07:00</updated><title type='text'>Thoughts about GUI layout techniques</title><summary type='text'>A remark on Wing IDE wxPython integration page caught my attention today:"A Caveat: Because Python lends itself so well to writing data-driven code, you may want to reconsider using a GUI builder for some tasks. In many cases, Python's introspection features make it possible to write generic GUI code that you can use to build user interfaces on the fly based on models of your data and your </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/109561907219716149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=109561907219716149' title='60 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109561907219716149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109561907219716149'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/09/thoughts-about-gui-layout-techniques.html' title='Thoughts about GUI layout techniques'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>60</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-109536123279952542</id><published>2004-09-16T13:00:00.000-07:00</published><updated>2004-09-16T12:06:23.483-07:00</updated><title type='text'>Languages, behavior, and frameworks</title><summary type='text'>It's quite interesting when different topics fuse together so nicely. Over the last days at c.l.py, and over this blog, I've been ranting about IDEs and frameworks for business applications. In an independent thread, I've also written a note about the seemingly connection between programmer behavior and the choice of programming language. Simon Brunning posted a comment on this blog pointing me </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/109536123279952542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=109536123279952542' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109536123279952542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109536123279952542'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/09/languages-behavior-and-frameworks.html' title='Languages, behavior, and frameworks'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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-7907246.post-109527961686339544</id><published>2004-09-15T13:20:00.000-07:00</published><updated>2004-09-15T13:20:16.863-07:00</updated><title type='text'>Do we really need SQL?</title><summary type='text'>It's been a few busy weeks since I returned to the world of business application development. This time, however, I'm having a chance to take a fresh look at it. Although I'm still too used to some tools to change my mind very quickly (IDEs, for example), there are a few things that I'm really keen to try out. One of them sounds like anathema -- do I really need a true RDBMS for my apps? (note: </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/109527961686339544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=109527961686339544' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109527961686339544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109527961686339544'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/09/do-we-really-need-sql.html' title='Do we really need SQL?'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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-7907246.post-109525896004663183</id><published>2004-09-15T07:36:00.000-07:00</published><updated>2004-09-15T07:40:30.373-07:00</updated><title type='text'>The Python IDE Manifesto</title><summary type='text'>I've been discussing over the past few days at c.l.py the state of the Python IDEs. Other threads have popped out on this same very subject since I resumed reading the mailing list a few weeks ago. To put things into perspective, IDEs are also a hot topic at one well known magazine. It's hard to keep the discussion from becoming religious. I'l try my best to respectfully put my own opinion here. </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/109525896004663183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=109525896004663183' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109525896004663183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109525896004663183'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/09/python-ide-manifesto.html' title='The Python IDE Manifesto'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-109507814538855114</id><published>2004-09-13T05:22:00.000-07:00</published><updated>2004-09-13T05:22:25.386-07:00</updated><title type='text'>Why do I like Python</title><summary type='text'>I believe that there are some things that you just can't take apart from the whole -- they're an integral part of the package. Code beauty and good behavior are strangely connected.Python is a wonderful programming language. It is, for the lack of a better word, elegant. Programs written in Python tend to look good, and read nicely, even when the reader is a newbie. Much has been said about this </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/109507814538855114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=109507814538855114' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109507814538855114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109507814538855114'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/09/why-do-i-like-python.html' title='Why do I like Python'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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-7907246.post-109422662216350479</id><published>2004-09-03T08:50:00.000-07:00</published><updated>2004-09-03T13:36:37.166-07:00</updated><title type='text'>Python + UML design tools</title><summary type='text'>Now that I'm trying to get to speed with business app development in Python, I decided that I needed to take the full course. Up to now, I used to make a quick database prototype using MS Access to jumpstart the process. It's fine for small stuff, but not so for something that is going to be used professionally. So I'll be using UML from the start, and I'm going to select good Python-aware tools </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/109422662216350479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=109422662216350479' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109422662216350479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109422662216350479'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/09/python-uml-design-tools.html' title='Python + UML design tools'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-109405787841104652</id><published>2004-09-01T09:56:00.000-07:00</published><updated>2004-09-08T12:09:41.960-07:00</updated><title type='text'>Python ORM tools</title><summary type='text'>An object relational mapper, or ORM, is a piece of software that sits between the object model used by an application and the relational model used by a conventional RDBMS system. It's a useful piece of software, as it allows one to blend the best of both worlds. The application can be written in terms of objects, and the database can be managed using conventional tools.A little bit of historyI </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/109405787841104652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=109405787841104652' title='22 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109405787841104652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109405787841104652'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/09/python-orm-tools.html' title='Python ORM tools'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-109394374466689369</id><published>2004-08-31T01:46:00.000-07:00</published><updated>2004-08-31T02:15:44.666-07:00</updated><title type='text'>Installing a Python Application Development Environment-</title><summary type='text'>I am installing a brand new Python environment on a low-end PC to keep up with my software development tasks while I'm off my office. The PC is really low end by todays standard -- a Pentium 166 -- but still, it should be enough for by needs, that is, mostly writing code. It has a few advantages too - in the sense that I'm not going to be able to test everything by the old lazy hit-the-run-button</summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/109394374466689369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=109394374466689369' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109394374466689369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109394374466689369'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/08/installing-python-application.html' title='Installing a Python Application Development Environment-'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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-7907246.post-109300952385256170</id><published>2004-08-20T06:45:00.000-07:00</published><updated>2004-08-20T06:50:35.413-07:00</updated><title type='text'>Implementing real time MIDI playback</title><summary type='text'>After some thought, I decided to give it a try and implement real time playback using the MIDI Streams API. I installed ctypes, an outstanding Python library to support native DLL calls from Python. After hacking with it a little bit, I managed to implement the basic midiStreamOpen and midiStreamClose calls. The library is actually fairly easy to use, but there were a few gotchas:I mistakenly </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/109300952385256170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=109300952385256170' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109300952385256170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109300952385256170'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/08/implementing-real-time-midi-playback.html' title='Implementing real time MIDI playback'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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-7907246.post-109275366756022465</id><published>2004-08-17T07:41:00.000-07:00</published><updated>2004-08-17T07:41:07.560-07:00</updated><title type='text'>Guitar MIDI simulator</title><summary type='text'>I must be crazy. I've never did multimedia programming before, and my first project is a guitar simulator. Why did I chose such a project? Well, I like to play MIDIs at home. I have a small collection of MIDI-Karaoke files, and we have fun singing in family. There are many MIDI Karaoke files out there, but in many cases the sound of the guitar is crap. Many people assume that it has to be so, but</summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/109275366756022465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=109275366756022465' title='26 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109275366756022465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109275366756022465'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/08/guitar-midi-simulator.html' title='Guitar MIDI simulator'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>26</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-109208201954034999</id><published>2004-08-09T13:06:00.000-07:00</published><updated>2004-08-09T13:06:59.540-07:00</updated><title type='text'>A nice Python based blog engine</title><summary type='text'>Nu Cardboard: Blog NotesI found this blog today, while checking the news from Daily Python. Hey. it's really nice, and it seems to be very well structured. That's the type of stuff I'm looking for myself. The author has promised to publish the source code, and I'm really looking forward to check how some things were implemented. Even if he doesn't publish it, the tips about CherryPy and Cheetah</summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/109208201954034999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=109208201954034999' title='58 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109208201954034999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109208201954034999'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/08/nice-python-based-blog-engine.html' title='A nice Python based blog engine'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>58</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7907246.post-109208020181936557</id><published>2004-08-09T12:27:00.000-07:00</published><updated>2004-08-09T12:36:41.820-07:00</updated><title type='text'>Back to Python, Blogs &amp; Wikis</title><summary type='text'>About one year ago I stopped coding and following Python's development. Not because I didn't like it, but other professional activities required my full dedication. Now it's over, and I'm back to my home office trying to figure out what the next big revolution will be. Over the past year, I missed the blog explosion, but I think that there is still time to catch up. And for all my programming </summary><link rel='replies' type='application/atom+xml' href='http://pythonnotes.blogspot.com/feeds/109208020181936557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7907246&amp;postID=109208020181936557' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109208020181936557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7907246/posts/default/109208020181936557'/><link rel='alternate' type='text/html' href='http://pythonnotes.blogspot.com/2004/08/back-to-python-blogs-wikis.html' title='Back to Python, Blogs &amp; Wikis'/><author><name>Carlos Ribeiro</name><uri>http://www.blogger.com/profile/16043745572254494898</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>
