<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/&quot;Ak8BQXk6fip7ImA9Wx5RGU0.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368</id><updated>2010-08-27T04:34:10.716-07:00</updated><title>Trent Mick</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>92</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/trentmick" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="trentmick" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;D0EDR385fSp7ImA9Wx5REE8.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-8208318125530883638</id><published>2010-08-16T23:14:00.000-07:00</published><updated>2010-08-16T23:14:36.125-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-16T23:14:36.125-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="nodejs" /><category scheme="http://www.blogger.com/atom/ns#" term="perl" /><title>who knew path joining differed so between Python, Ruby, Node, Perl</title><content type="html">&lt;p&gt;In Python I do a lot of path manipulations for build systems, various
command-line utilities and Komodo support modules. Typically this is with
Python&amp;#8217;s &lt;code&gt;os.path&lt;/code&gt; module. One thing I&amp;#8217;ve come to expect of path joining,
&lt;code&gt;os.path.join&lt;/code&gt;, is this (apparently rare) detail:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;If any component is an absolute path, all previous path components
will be discarded.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I say &amp;#8220;apparently rare&amp;#8221; because, in Python:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ python
&amp;gt;&amp;gt;&amp;gt; import os.path
&amp;gt;&amp;gt;&amp;gt; os.path.join("/Users/trentm", "/var/log")
'/var/log'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;in Ruby:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ irb
&amp;gt;&amp;gt; File.join("/Users/trentm", "/var/log")
=&amp;gt; "/Users/trentm/var/log"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;in Node.js:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ node
node&amp;gt; var path = require('path')
node&amp;gt; path.join("/Users/trentm", "/var/log")
'/Users/trentm/var/log'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;in Perl:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ cat pathjoin.pl 
use File::Spec;
print File::Spec-&amp;gt;join('/Users/trentm', '/var/log'), "\n";
$ perl pathjoin.pl 
/Users/trentm//var/log
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Conclusions? Certainly none of these libraries is going to change their
behaviour here, with the possible exception of Node which is young and
changing very quickly. I&amp;#8217;d say the double &amp;#8216;/&amp;#8217; in Perl&amp;#8217;s &lt;code&gt;File::Spec&lt;/code&gt; is
poor &amp;#8211; though it doesn&amp;#8217;t give in invalid path. You could certainly argue
that Ruby&amp;#8217;s and Node&amp;#8217;s interpretation is less subtle (often a good thing).
I &lt;strong&gt;like&lt;/strong&gt; Python&amp;#8217;s interpretation: &lt;code&gt;os.path.join&lt;/code&gt; is kind of like
running &lt;code&gt;cd&lt;/code&gt; for each given path in sequence to get the resultant
directory. It means I don&amp;#8217;t need a guard against an absolute path input
datum being joined to a current working directory scope.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;d be curious to know what is typical in other languages, if there are
any takers reading this post. If blog commenting isn&amp;#8217;t your thing, you
can tweet &amp;#8220;@trentmick&amp;#8221;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-8208318125530883638?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/8208318125530883638/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/08/who-knew-path-joining-differed-so.html#comment-form" title="14 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/8208318125530883638?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/8208318125530883638?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/08/who-knew-path-joining-differed-so.html" title="who knew path joining differed so between Python, Ruby, Node, Perl" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>14</thr:total></entry><entry gd:etag="W/&quot;C0cBQn47eCp7ImA9WxFaEU4.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-6786953332554148339</id><published>2010-07-14T11:10:00.000-07:00</published><updated>2010-07-14T11:10:53.000-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-14T11:10:53.000-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="komodo" /><category scheme="http://www.blogger.com/atom/ns#" term="activestate" /><category scheme="http://www.blogger.com/atom/ns#" term="mozilla" /><title>Komodo 6.0 Beta 2: HTML 5, CSS 3, Python 3, DB Explorer, ...</title><content type="html">&lt;p&gt;We (&lt;a href="http://www.activestate.com/"&gt;ActiveState&lt;/a&gt;) released Komodo 6.0 beta 2 yesterday and we want your feedback.
&lt;strong&gt;HTML 5&lt;/strong&gt; autocomplete. &lt;strong&gt;CSS 3&lt;/strong&gt; autocomplete. Full &lt;strong&gt;Python 3&lt;/strong&gt; support (debugging, syntax checking, autocomplete, code browsing). A new &lt;strong&gt;Database Explorer&lt;/strong&gt; tool for quickly exploring SQL databases (SQLite out of the box and extensions for &lt;a href="http://community.activestate.com/xpi/mysql-database-explorer"&gt;MySQL&lt;/a&gt; and &lt;a href="http://community.activestate.com/xpi/oracle-database-explorer"&gt;Oracle&lt;/a&gt;, with plans for Postgres). A &lt;strong&gt;new project system&lt;/strong&gt; called &amp;ldquo;Places&amp;rdquo; that adds a file system browser (local and remote). New &lt;strong&gt;publishing&lt;/strong&gt; support for syncing a directory with a remote machine. Additions to Komodo&amp;rsquo;s &lt;a href="http://docs.activestate.com/komodo/6.0/hyperlinks.html#hyperlinks_top"&gt;Hyperlinks&lt;/a&gt; for quickly navigating to file references. Added support for PHP, Perl, Ruby and JavaScript regular expression debugging with Komodo&amp;rsquo;s excellent &lt;a href="http://docs.activestate.com/komodo/6.0/regex.html"&gt;Rx&lt;/a&gt; tool. See the &lt;a href="http://community.activestate.com/komodo-60-features"&gt;Komodo 6.0 Features&lt;/a&gt; post for a full outline.&lt;/p&gt;

&lt;table style="margin-left: 30px;"&gt;
&lt;tr&gt;&lt;th&gt;Komodo IDE&lt;/th&gt;&lt;td&gt;&lt;a href="http://www.activestate.com/komodo-ide/downloads"&gt;http://www.activestate.com/komodo-ide/downloads&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;Komodo Edit&lt;/th&gt;&lt;td&gt;&lt;a href="http://www.activestate.com/komodo-edit/downloads"&gt;http://www.activestate.com/komodo-edit/downloads&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;&lt;a href="http://www.activestate.com/blog/2010/07/komodo-6.0-beta-2"&gt;Full post here on the ActiveState blog&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-6786953332554148339?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/6786953332554148339/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/07/komodo-60-beta-2-html-5-css-3-python-3.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/6786953332554148339?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/6786953332554148339?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/07/komodo-60-beta-2-html-5-css-3-python-3.html" title="Komodo 6.0 Beta 2: HTML 5, CSS 3, Python 3, DB Explorer, ..." /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;CkEGRHs-eCp7ImA9WxFaEEk.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-2929022839035293663</id><published>2010-07-13T10:03:00.000-07:00</published><updated>2010-07-13T10:03:45.550-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-13T10:03:45.550-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>eol.py 0.7.4 -- Python 3 support</title><content type="html">&lt;h3&gt;Where?&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Project Page: &lt;a href="http://github.com/trentm/eol"&gt;http://github.com/trentm/eol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PyPI: &lt;a href="http://pypi.python.org/pypi/eol/"&gt;http://pypi.python.org/pypi/eol/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;What's new?&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Python 3 support (not heavily tested yet)&lt;/li&gt;
&lt;li&gt;Starter test suite&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full changelog: &lt;a href="http://github.com/trentm/eol/tree/master/CHANGES.md#files"&gt;http://github.com/trentm/eol/tree/master/CHANGES.md#files&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;What is 'eol'?&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;eol&lt;/code&gt; is both a command-line script &lt;code&gt;eol&lt;/code&gt; and a Python module &lt;code&gt;eol&lt;/code&gt; for working
with end-of-line chars in text files.&lt;/p&gt;

&lt;h4&gt;Command line usage&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;# list EOL-style of files
$ eol *
configure: Unix (LF)
build.bat: Windows (CRLF)
snafu.txt: Mixed, predominantly Unix (LF)

# find files with a given EOL-style
$ eol -f CRLF -x .svn -r ~/src/python
/Users/trentm/src/python/Doc/make.bat
/Users/trentm/src/python/Lib/email/test/data/msg_26.txt
/Users/trentm/src/python/Lib/encodings/cp720.py
...

# convert EOL-style of files
$ eol -c LF foo.c 
converted `foo.c' to LF EOLs
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Module usage&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import eol
&amp;gt;&amp;gt;&amp;gt; eol.eol_info_from_path("configure")
('\n', '\n')         # (&amp;lt;detected-eols&amp;gt;, &amp;lt;suggested-eols&amp;gt;)
&amp;gt;&amp;gt;&amp;gt; eol.eol_info_from_path("build.bat")
('\r\n', '\r\n')
&amp;gt;&amp;gt;&amp;gt; eol.eol_info_from_path("snafu.txt")
(&amp;lt;class 'eol.MIXED'&amp;gt;, '\n')
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;See the &lt;a href="http://github.com/trentm/eol#readme"&gt;README&lt;/a&gt; for full usage
information.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-2929022839035293663?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/2929022839035293663/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/07/eolpy-074-python-3-support.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/2929022839035293663?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/2929022839035293663?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/07/eolpy-074-python-3-support.html" title="eol.py 0.7.4 -- Python 3 support" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DUQNSXs_eSp7ImA9WxFbF0k.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-452654397382173428</id><published>2010-07-10T00:36:00.000-07:00</published><updated>2010-07-10T00:36:38.541-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-10T00:36:38.541-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>quick hack how to move a part of a Mercurial (hg) repo to git</title><content type="html">&lt;p&gt;My quick dirty hack to move a (small) part of a Mercurial (hg) repo to Git.
In my case this was for moving my single file &amp;ldquo;testlib.py&amp;rdquo; from
&lt;a href="http://bitbucket.org/trentm/sandbox/src/tip/testlib/"&gt;here on bitbucket&lt;/a&gt;
to
&lt;a href="http://github.com/trentm/testlib/tree/master/lib/"&gt;here on github&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Dump the log of that part of the hg repo to a file.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;export WORKDIR=$HOME/tmp/migrate
cd HGREPO/foo
hg log -pv . &amp;gt; $WORKDIR/full.patch
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create the starter git repo&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd $WORKDIR
git init foo
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Break up the log into a number of &amp;ldquo;changesetNNN.patch&amp;rdquo; files with this
Python code:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# parse.py
import codecs
changeset = []
i = 0

def write_changeset():
    global changeset
    if not changeset:
        return
    codecs.open("changeset%05d.patch" % i, 'w', "utf-8").write(''.join(changeset))
    i += 1
    changeset = []

for line in open("full.patch"):
    if line.startswith("changeset:"):
        write_changeset()
    changeset.append(line)
write_changeset()
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and then run:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;python parse.py
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apply and commit each patch with this Python script&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Usage: python apply.py TARGET-REPO-BASE-DIR
import os
from os.path import *
from glob import glob
import subprocess
from pprint import pprint

def apply_patch(target_repo_base_dir, patch_path):
    content = open(patch_path).read()
    header, diff = content.split('\n\n\n', 1)
    assert diff.startswith("diff --git a")
    fields = {}
    lines = header.splitlines(False)
    for i, line in enumerate(lines):
        key, value = line.split(':', 1)
        if key == "description":
            fields[key] = '\n'.join(lines[i+1:])
            break
        value = value.strip()
        fields[key] = value
    
    # Do any path renamings here. For example, I wanted to move from
    # "testlib/testlib.py" in the old repo to "lib/testlib.py" in the new.
    diff = diff.replace('a/testlib/testlib.py', 'a/lib/testlib.py')
    diff = diff.replace('b/testlib/testlib.py', 'b/lib/testlib.py')
    
    f = open(patch_path+".diff", 'w')
    f.write(diff)
    f.close()
    f = open(patch_path+".msg", 'w')
    f.write(fields["description"])
    f.close()
    cwd = target_repo_base_dir
    subprocess.check_call(['git', 'apply', '--whitespace=nowarn',
        abspath(patch_path+".diff")], cwd=cwd)
    subprocess.check_call(['git', 'add', 'lib/testlib.py'], cwd=cwd)
    subprocess.check_call(['git', 'commit', '--date', fields["date"],
        '-F', abspath(patch_path+".msg")], cwd=cwd)

if __name__ == "__main__":
    target_repo_base_dir = sys.argv[1]
    patches = list(sorted(glob("changeset*.patch")))
    for patch_path in patches:
        print "--", patch_path
        apply_patch(target_repo_base_dir, patch_path)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then run:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;python apply.py foo    # apply all changeset*.patch files to "foo" git repo
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now you can push this Git repo to github or whereever.&lt;/p&gt;

&lt;h1&gt;To improve on&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;You currently need to manually create the dir structure first.&lt;/li&gt;
&lt;li&gt;This doesn&amp;rsquo;t currently used the parse &amp;ldquo;user&amp;rdquo; field from the hg commit log
for the &amp;ldquo;git commit -a AUTHOR&amp;rdquo; command. Mainly this is because I didn&amp;rsquo;t need
that, but also because the &amp;ldquo;user&amp;rdquo; value in the hg log isn&amp;rsquo;t the configured
full user name and email, but just the short username. Maybe that was just me.&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/1552913144533093368-452654397382173428?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/452654397382173428/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/07/quick-hack-how-to-move-part-of.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/452654397382173428?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/452654397382173428?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/07/quick-hack-how-to-move-part-of.html" title="quick hack how to move a part of a Mercurial (hg) repo to git" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>4</thr:total></entry><entry gd:etag="W/&quot;DkAEQXg6cSp7ImA9WxFbFkQ.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-7805876335491236614</id><published>2010-07-08T11:55:00.001-07:00</published><updated>2010-07-09T09:58:20.619-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-09T09:58:20.619-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="activestate" /><category scheme="http://www.blogger.com/atom/ns#" term="activepython" /><title>On a bit of confusion</title><content type="html">&lt;p&gt;On a bit of confusion in &lt;a href="http://www.activestate.com/blog/2010/07/activepython-27-released"&gt;ActivePython 2.7 released - and what 2.7 means for Python&amp;rsquo;s future&lt;/a&gt;, in particular the following paragraph. Before:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;While the Python community has declared a moratorium on major 2.x releases in an effort to facilitate other Python implementations to catch up and, thus, accelerate the adoption of Python 3.x, ActiveState will continue supporting 2.7.x and adding new modules and updating revisions to existing ones as they become available.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;While &lt;a href="http://www.python.org/dev/peps/pep-3003/"&gt;you may have read&lt;/a&gt;, the Python community has declared a temporary moratorium (suspension) on the Python language syntax in an effort to facilitate other Python implementations to catch up to Python 3.x &amp;mdash; the moratorium does not that mean that python core development has stopped or even slowed down.  &lt;/p&gt;
  
  &lt;p&gt;On the contrary, new modules continue to be added, bugs fixed, and performance tweeked &amp;mdash; and, as always, ActiveState will continue supporting 2.7.x with builds, extra modules and PyPM as they become available.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://twitter.com/jessenoller"&gt;Jesse Noller&lt;/a&gt; accurately noted that the former paragraph was confusing. In particular, a possible interpretation that the Python community isn&amp;rsquo;t going to be supporting Python 2.7 &amp;ndash; which is just &lt;a href="http://docs.python.org/dev/whatsnew/2.7.html#the-future-for-python-2-x"&gt;not true&lt;/a&gt;. Python 2.7 will be supported for longer than the typical two years that a Python 2.x release is supported.&lt;/p&gt;

&lt;p&gt;It is easy to convolve the mostly unrelated &lt;em&gt;Python language moratorium&lt;/em&gt; and the plan that &lt;em&gt;Python 2.7 is the last 2.x&lt;/em&gt;. The two are somewhat related in that ultimately the hope is they both lead to smoother adoption of Python 3. The issue (from ActiveState&amp;rsquo;s Product Manager&amp;rsquo;s point of view) is that an enterprise customer can get swayed away from considering Python when reading stuff like the following from &lt;a href="http://lwn.net/Articles/361266/"&gt;Python moratorium and the future of 2.x&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;On November 9, Python BDFL ("Benevolent Dictator For Life") Guido van Rossum froze the Python language&amp;rsquo;s syntax and grammar in their current form for at least the upcoming Python 2.7 and 3.2 releases, and possibly for longer still. This move is intended to slow things down, giving the larger Python community a chance to catch up with the latest Python 3.x releases.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is &lt;em&gt;very&lt;/em&gt; easy for the less-technical person to interpret &amp;ldquo;moratorium on Python language syntax&amp;rdquo; as a stop on &lt;em&gt;all core Python development&lt;/em&gt;. This differentiation was the kernel of a heated debate I just had with our Product Manager recently.&lt;/p&gt;

&lt;p&gt;The intention of the paragraph in the ActiveState blog post is basically to state that the language moratorium isn&amp;rsquo;t something that should dissuade businesses from considering Python.&lt;/p&gt;

&lt;p&gt;That said: Mea culpa. I had the chance to catch this the first time and didn&amp;rsquo;t.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-7805876335491236614?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/7805876335491236614/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/07/on-bit-of-confusion.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/7805876335491236614?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/7805876335491236614?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/07/on-bit-of-confusion.html" title="On a bit of confusion" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;CE8AR3k_cSp7ImA9WxFVFUU.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-1876450530036778824</id><published>2010-06-14T23:19:00.000-07:00</published><updated>2010-06-14T23:20:46.749-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-14T23:20:46.749-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="django" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="mozilla" /><title>django-markdown-deux Django app</title><content type="html">&lt;ul&gt;
&lt;li&gt;Project page: http://github.com/trentm/django-markdown-deux&lt;/li&gt;
&lt;li&gt;on PyPI: http://pypi.python.org/pypi/django-markdown-deux/&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;django-markdown-deux&lt;/code&gt; is a small Django app that provides template tags for using
&lt;a href="http://daringfireball.net/projects/markdown/"&gt;Markdown&lt;/a&gt; using the
&lt;a href="http://code.google.com/p/python-markdown2/"&gt;python-markdown2&lt;/a&gt; library. MIT license.&lt;/p&gt;

&lt;h2&gt;What's with the "deux" in the name?&lt;/h2&gt;

&lt;p&gt;The obvious name for this project in &lt;code&gt;django-markdown2&lt;/code&gt;. However, there
&lt;a href="http://github.com/svetlyak40wt/django-markdown2"&gt;already is one!&lt;/a&gt; and name
confusion doesn't help anybody. Plus, I took French immersion in school for 12
years: might as well put it to use.&lt;/p&gt;

&lt;h2&gt;Quick Usage&lt;/h2&gt;

&lt;h3&gt;&lt;code&gt;markdown&lt;/code&gt; template filter&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;{% load markdown_deux_tags %}
...
{{ myvar|markdown:"STYLE" }}      {# convert `myvar` to HTML using the "STYLE" style #}
{{ myvar|markdown }}              {# same as `{{ myvar|markdown:"default"}}` #}
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;&lt;code&gt;markdown&lt;/code&gt; template block tag&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;{% load markdown_deux_tags %}
...
{% markdown STYLE %}        {# can omit "STYLE" to use the "default" style #}
This is some **cool**
[Markdown](http://daringfireball.net/projects/markdown/)
text here.
{% endmarkdown %]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;See more usage info, available settings, installation notes, etc. at the github
project page. (I mention on Moz planet because Benjamin is, or was, using
python-markdown2 and I've heard Mozilla is using more Django these days.)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-1876450530036778824?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/1876450530036778824/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/06/django-markdown-deux-django-app.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/1876450530036778824?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/1876450530036778824?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/06/django-markdown-deux-django-app.html" title="django-markdown-deux Django app" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DkYCQHY7eyp7ImA9WxFVFU4.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-5070829490033281256</id><published>2010-06-14T09:47:00.000-07:00</published><updated>2010-06-14T09:49:21.803-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-14T09:49:21.803-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="vancouver" /><title>Donating blood in downtown Vancouver</title><content type="html">&lt;p&gt;I like to try to donate blood regularly (you're allow to donate every 56 days).
It is an easy thing to do to help the system. But really I'm just in it for the
&lt;strong&gt;free cookies&lt;/strong&gt; at the end of it. There is no other way I can justify my
having an Oreo at 10am. Here is how in downtown Vancouver (where I work):&lt;/p&gt;

&lt;div style="font-size: 150%; margin-left: 40px;"&gt;
    upcoming schedule: &lt;a href="http://bit.ly/vancouverblood"&gt;http://bit.ly/vancouverblood&lt;/a&gt;&lt;br/&gt;
    map: &lt;a href="http://bit.ly/vancouverbloodmap"&gt;http://bit.ly/vancouverbloodmap&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Some tips: You'll need ID. A driver's licence will do. Don't go at lunch time when it gets much more busy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-5070829490033281256?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/5070829490033281256/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/06/donating-blood-in-downtown-vancouver.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/5070829490033281256?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/5070829490033281256?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/06/donating-blood-in-downtown-vancouver.html" title="Donating blood in downtown Vancouver" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C0INQXw_cCp7ImA9WxFWEE0.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-2204957359896749721</id><published>2010-05-27T16:06:00.000-07:00</published><updated>2010-05-27T16:06:30.248-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-27T16:06:30.248-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="vanpyz" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="activestate" /><title>June Vancouver Python User Group (VanPyZ) this Tuesday at ActiveState</title><content type="html">&lt;p&gt;We are hosting the &lt;strong&gt;June VanPyZ meeting&lt;/strong&gt; at ActiveState this coming Tuesday evening. Come see &lt;a href="http://twitter.com/andymckay"&gt;Andy Mckay&lt;/a&gt; talk about &lt;strong&gt;Using SMS in the Developing World&lt;/strong&gt; and chat about Python. Festivities begin at 7pm &lt;a href="http://tinyurl.com/activestatemap"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;More details on &lt;a href="http://www.activestate.com/blog/2010/05/june-vancouver-python-user-group-vanpyz-tuesday-june-1-2010-activestate"&gt;my work blog post&lt;/a&gt; and at &lt;a href="http://vanpyz.org/"&gt;vanpyz.org&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-2204957359896749721?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/2204957359896749721/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/05/june-vancouver-python-user-group-vanpyz.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/2204957359896749721?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/2204957359896749721?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/05/june-vancouver-python-user-group-vanpyz.html" title="June Vancouver Python User Group (VanPyZ) this Tuesday at ActiveState" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;AkQCRX84fSp7ImA9WxFXGU4.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-3816662130301485424</id><published>2010-05-26T22:32:00.000-07:00</published><updated>2010-05-26T22:32:44.135-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-26T22:32:44.135-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="markdown" /><title>python-markdown2 1.0.1.17</title><content type="html">&lt;h3&gt;Where?&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Project Page: &lt;a href="http://code.google.com/p/python-markdown2/"&gt;http://code.google.com/p/python-markdown2/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PyPI: &lt;a href="http://pypi.python.org/pypi/markdown2/"&gt;http://pypi.python.org/pypi/markdown2/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;What's new?&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;[Issue 36] Fix "cuddled-lists" extra handling for an
looks-like-a-cuddled-list-but-is-indented block. See the
"test/tm-cases/cuddled&lt;em&gt;list&lt;/em&gt;indented.text" test case.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Experimental new "toc" extra. The returned string from conversion will have
a &lt;code&gt;toc_html&lt;/code&gt; attribute.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New "header-ids" extra that will add an &lt;code&gt;id&lt;/code&gt; attribute to headers:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# My First Section
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;will become:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;h1 id="my-first-section"&amp;gt;My First Section&amp;lt;/h1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;An argument can be give for the extra, which will be used as a prefix for
the ids:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ cat foo.txt 
# hi there
$ python markdown2.py foo.txt 
&amp;lt;h1&amp;gt;hi there&amp;lt;/h1&amp;gt;
$ python markdown2.py foo.txt -x header-ids
&amp;lt;h1 id="hi-there"&amp;gt;hi there&amp;lt;/h1&amp;gt;
$ python markdown2.py foo.txt -x header-ids=prefix
&amp;lt;h1 id="prefix-hi-there"&amp;gt;hi there&amp;lt;/h1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Preliminary support for "html-classes" extra: takes a dict mapping HTML tag
to the string value to use for a "class" attribute for that emitted tag.
Currently just supports "pre" and "code" for code &lt;em&gt;blocks&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full changelog: &lt;a href="http://code.google.com/p/python-markdown2/source/browse/trunk/CHANGES.txt"&gt;http://code.google.com/p/python-markdown2/source/browse/trunk/CHANGES.txt&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;What is 'markdown2'?&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;markdown2.py&lt;/code&gt; is a fast and complete Python implementation of
&lt;a href="http://daringfireball.net/projects/markdown/"&gt;Markdown&lt;/a&gt; -- a
text-to-HTML markup syntax.&lt;/p&gt;

&lt;h3&gt;Module usage&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import markdown2
&amp;gt;&amp;gt;&amp;gt; markdown2.markdown("*boo!*")  # or use `html = markdown_path(PATH)`
u'&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;boo!&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;\n'

&amp;gt;&amp;gt;&amp;gt; markdowner = Markdown()
&amp;gt;&amp;gt;&amp;gt; markdowner.convert("*boo!*")
u'&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;boo!&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;\n'
&amp;gt;&amp;gt;&amp;gt; markdowner.convert("**boom!**")
u'&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;boom!&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;\n'
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Command line usage&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;$ cat hi.markdown
# Hello World!
$ markdown2 hi.markdown
&amp;lt;h1&amp;gt;Hello World!&amp;lt;/h1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This implementation of Markdown implements the full "core" syntax plus a
number of extras (e.g., code syntax coloring, footnotes) as described on
&lt;a href="http://code.google.com/p/python-markdown2/wiki/Extras"&gt;http://code.google.com/p/python-markdown2/wiki/Extras&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-3816662130301485424?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/3816662130301485424/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/05/python-markdown2-10117.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/3816662130301485424?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/3816662130301485424?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/05/python-markdown2-10117.html" title="python-markdown2 1.0.1.17" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;CUAFQHczcCp7ImA9WxFXEkg.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-6100770929544157587</id><published>2010-05-19T00:21:00.001-07:00</published><updated>2010-05-19T00:21:51.988-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-19T00:21:51.988-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>eol.py -- a tool for working with text file end-of-line characters</title><content type="html">&lt;p&gt;Just finally released &lt;code&gt;eol.py&lt;/code&gt; (&lt;a href="http://github.com/trentm/eol"&gt;on github&lt;/a&gt;, &lt;a href="http://pypi.python.org/pypi/eol"&gt;on pypi&lt;/a&gt;) -- a tool I've been using for a while to help find and convert EOLs in text files. It is a small Python module and command-line script. MIT license. Hopefully useful to others.&lt;/p&gt;

&lt;p&gt;See the notes in either link above for usage details.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-6100770929544157587?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/6100770929544157587/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/05/eolpy-tool-for-working-with-text-file.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/6100770929544157587?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/6100770929544157587?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/05/eolpy-tool-for-working-with-text-file.html" title="eol.py -- a tool for working with text file end-of-line characters" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C08HRng9eSp7ImA9WxBaFEg.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-8883856136324592431</id><published>2010-03-24T10:29:00.000-07:00</published><updated>2010-03-24T10:30:37.661-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-24T10:30:37.661-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="komodo" /><category scheme="http://www.blogger.com/atom/ns#" term="ui" /><category scheme="http://www.blogger.com/atom/ns#" term="activestate" /><title>alternative Komodo doc icon for Mac</title><content type="html">&lt;p&gt;Sweet! &lt;a href="http://twitter.com/trishacupra"&gt;Trisha Cupra&lt;/a&gt; &lt;a href="http://twitter.com/trishacupra/statuses/10972348563"&gt;wasn't
happy&lt;/a&gt; with the current
Komodo Edit doc icon so she &lt;a href="http://skitch.com/trishacupra/n5tyy/dock"&gt;made a (cool)
replacement&lt;/a&gt;.&lt;/p&gt;

&lt;div&gt;&lt;img src="http://img.skitch.com/20100324-tgcpb7xbkswjasb7u92sik4t2u.png"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-8883856136324592431?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/8883856136324592431/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/03/alternative-komodo-doc-icon-for-mac.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/8883856136324592431?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/8883856136324592431?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/03/alternative-komodo-doc-icon-for-mac.html" title="alternative Komodo doc icon for Mac" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;DUQDSXo_eip7ImA9WxBbEEU.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-380091257643927421</id><published>2010-03-08T14:29:00.001-08:00</published><updated>2010-03-08T14:29:38.442-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-08T14:29:38.442-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="vanpyz" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="activestate" /><title>March VanPyZ meeting tomorrow at ActiveState</title><content type="html">&lt;p&gt;The &lt;a href="http://wiki.python.org/moin/VanPyZ#NextEvent"&gt;March VanPyZ meeting&lt;/a&gt; will be hosted at ActiveState this coming Tuesday evening (&lt;em&gt;tomorrow!&lt;/em&gt;). &lt;strong&gt;I posted &lt;a href="http://blogs.activestate.com/2010/03/march-vancouver-python-user-group-vanpyz-tuesday-at-activestate/"&gt;details on my work blog&lt;/a&gt;.&lt;/strong&gt; We'll be trying out a slightly new thing: Lightning talks, a short 5 minute talk on whatever &lt;sup class="footnote-ref" id="fnref-1"&gt;&lt;a href="#fn-1"&gt;1&lt;/a&gt;&lt;/sup&gt;. The Lightning Talk format works so well at PyCon. See my work blog post for more details. See you there.&lt;/p&gt;

&lt;p&gt;"VanPyZ" is the Vancouver Python user group.&lt;/p&gt;

&lt;div class="footnotes"&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id="fn-1"&gt;
&lt;p&gt;In my email to the VanPyZ list I promised a beer to whoever presents. :) Send me a one-liner on what you'd like to talk about.&amp;nbsp;&lt;a href="#fnref-1" class="footnoteBackLink" title="Jump back to footnote 1 in the text."&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-380091257643927421?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/380091257643927421/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/03/march-vanpyz-meeting-tomorrow-at.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/380091257643927421?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/380091257643927421?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/03/march-vanpyz-meeting-tomorrow-at.html" title="March VanPyZ meeting tomorrow at ActiveState" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C0ENQX8-fyp7ImA9WxBUGE4.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-7425526591380358290</id><published>2010-03-05T15:28:00.000-08:00</published><updated>2010-03-05T15:28:10.157-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-05T15:28:10.157-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="pythontranslationparty" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="activestate" /><title>PyCon 2010 wrap-ups</title><content type="html">&lt;div style="float: right; margin: 5px;"&gt;
  &lt;img src="https://dl.dropbox.com/u/1301040/blog/2010/03/pycon2010.png"/&gt;
&lt;/div&gt;

&lt;p&gt;I'm back from &lt;a href="http://us.pycon.org/2010/about/"&gt;PyCon 2010&lt;/a&gt; in Atlanta
(actually I've been back for almost two weeks now, but I'm a lazy writer).
PyCon, as usual, was a great time. I wrote a long wrap-up on my work blog
here:&lt;/p&gt;

&lt;div style="font-size: 120%;"&gt;
  &lt;a href="http://blogs.activestate.com/2010/03/pycon-2010-wrap-up/"&gt;Trent's work PyCon 2010 wrap-up&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;A couple more personal additions...
&lt;a name='more'&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I announced &lt;a href="http://pythontranslationparty.appspot.com"&gt;Python Translation
Party&lt;/a&gt; during PyCon --
&lt;a href="http://trentmick.blogspot.com/2010/02/python-translation-party.html"&gt;here&lt;/a&gt;,
&lt;a href="http://trentmick.blogspot.com/2010/02/updated-python-translation-party-fewer.html"&gt;here&lt;/a&gt;,
and in a Lightning Talk (video not up yet) -- to a resounding golf clap. :)
It is a small site devoted to translating Python code between 2 and 3 using
the lib2to3 and lib3to2 libraries until "equilibrium" is found. Mostly it
was a fun little play with AppEngine. However, it has also resulted in a
few bug reports to lib3to2 and lib2to3, which is cool.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I had a good chat with &lt;a href="http://catherinedevlin.blogspot.com/"&gt;Catherine
Devlin&lt;/a&gt; about her
&lt;a href="http://pypi.python.org/pypi/cmd2"&gt;cmd2&lt;/a&gt; library, because it is so similar
in spirit to my &lt;a href="http://pypi.python.org/pypi/cmdln"&gt;cmdln&lt;/a&gt; library. We
chatted a bit about whether a merging of the two libs would be reasonable.
No concrete plans: busy busy.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It was great to hook up with people that I tend to only see at PyCon.
I look forward to PyCon next year.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-7425526591380358290?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/7425526591380358290/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/03/pycon-2010-wrap-ups.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/7425526591380358290?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/7425526591380358290?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/03/pycon-2010-wrap-ups.html" title="PyCon 2010 wrap-ups" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DUQAR386cCp7ImA9WxBUEUs.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-3271167893645042969</id><published>2010-02-25T22:36:00.001-08:00</published><updated>2010-02-25T22:55:46.118-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-25T22:55:46.118-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="hockey" /><title>On fighting in hockey</title><content type="html">&lt;p&gt;I love hockey. Obviously, growing up in Canada I'm biased, but: It is an active
and skilled sport which has &lt;em&gt;continuous play&lt;/em&gt; where baseball, curling and
football aren't or don't. A real gem of hockey is a breathtakingly long stretch
of all-out fast back and forth play. The build up to an at-bat in baseball
pales. A full-field punt return in football doesn't come close. Basketball,
soccer and rugby have continuous play, as well. Perhaps I prefer hockey because
of the speed you don't get in the others. Undoubhtedly part of it is the
general love for hockey in Canada. Perhaps part of it is the physicalness. And
here is where there is a problem &lt;sup class="footnote-ref" id="fnref-1"&gt;&lt;a href="#fn-1"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;a name='more'&gt;&lt;/a&gt;

&lt;p&gt;By "physicalness" I mean cleanly knocking a player off the puck, a defenceman
rubbing a charging forward out on the boards, the battle for positioning in
front of the net. To many, including &lt;a href="http://en.wikipedia.org/wiki/Gary_Bettman"&gt;Gary
Bettman&lt;/a&gt;, the physicalness includes
fighting. To Gary it is &lt;a href="http://www.usatoday.com/sports/hockey/nhl/2007-04-04-fight-rules_N.htm"&gt;"part of the
game"&lt;/a&gt;.
That's crap. Somehow the Vancouver 2010 Olympic hockey games have provided
great spectacle without punches (in the games I've seen anyway). Somehow
soccer, basketball and football (heated games, all) maintain fan fanaticism
with fighting rules that all but remove it from the game.&lt;/p&gt;

&lt;p&gt;It is also sad. Sad because I have a two year old son. Why do I need to explain
the inconsistency to my son: hockey is a great game, except for the immaturity
of the fighting. An immaturity that is abetted and
&lt;a href="http://www.hockeyfights.com/"&gt;celebrated&lt;/a&gt; at the top-level. Hockey fighting
isn't even comparable to boxing. It is ultimate fighting. It is something
children should be educated away from, not implicitly taught to emulate.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.cbc.ca/sports/hockey/story/2007/03/26/bettman-figting.html"&gt;Gary on fighting&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;From a player safety standpoint, what happens in fighting is something we
  need to look at just as we need to look at hits to the head,&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Certainly player safety is important, but this is a deflection.  Fighting in
hockey isn't about the safety issue, it is about the message to the immature --
from the 2 year-olds to the 30-something neanderthals you sometimes encouter in
recreational hockey. Fighting no more needs to be part of the game, than my son
needs to hit mommy when she takes away his cookie.&lt;/p&gt;

&lt;div class="footnotes"&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id="fn-1"&gt;
&lt;p&gt;At least in the NHL and the Canadian minor leagues (WHL, OHL, et al) that I'm exposed to.&amp;nbsp;&lt;a href="#fnref-1" class="footnoteBackLink" title="Jump back to footnote 1 in the text."&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-3271167893645042969?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/3271167893645042969/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/02/on-fighting-in-hockey.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/3271167893645042969?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/3271167893645042969?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/02/on-fighting-in-hockey.html" title="On fighting in hockey" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;DUMERnYycCp7ImA9WxBUEUs.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-8852112558455241</id><published>2010-02-22T23:01:00.001-08:00</published><updated>2010-02-25T22:56:47.898-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-25T22:56:47.898-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="pythontranslationparty" /><title>updated Python Translation Party: fewer booms</title><content type="html">&lt;p&gt;I've &lt;strong&gt;updated &lt;a href="http://pythontranslationparty.appspot.com/"&gt;Python Translation
Party&lt;/a&gt;&lt;/strong&gt; to recent versions of
&lt;a href="http://svn.python.org/projects/sandbox/trunk/2to3/lib2to3/"&gt;&lt;code&gt;lib2to3&lt;/code&gt;&lt;/a&gt; and
&lt;a href="http://bitbucket.org/amentajo/lib3to2/"&gt;&lt;code&gt;lib3to2&lt;/code&gt;&lt;/a&gt;. I spoke with Joe Amenta at
the &lt;a href="http://us.pycon.org/2010/conference/posters/accepted/"&gt;PyCon 2010 poster
session&lt;/a&gt; (he had a
poster on his &lt;code&gt;lib3to2&lt;/code&gt; work) and he mentioned that the best thing I could do
with Python Translation Party for him was to update to the latest. :) Updating
to the latest is a &lt;em&gt;little&lt;/em&gt; difficult because App Engine runs Python 2.5.2 and
&lt;code&gt;lib3to2&lt;/code&gt; targets Python 2.7, so some small backporting was in order.&lt;/p&gt;

&lt;p&gt;At the least, the new update results in fewer "booms" 
&lt;a name='more'&gt;&lt;/a&gt;
 -- i.e. when there is
some sort of unexpected error in translating either way. The "boom" section of
the &lt;a href="http://pythontranslationparty.appspot.com/crash/"&gt;"Crash other parties"
page&lt;/a&gt; before:&lt;/p&gt;

&lt;div&gt;
&lt;img src="https://dl.dropbox.com/u/1301040/blog/2010/02/party_crash_before.png"/&gt;
&lt;/div&gt;

&lt;p&gt;and after:&lt;/p&gt;

&lt;div&gt;
&lt;img src="https://dl.dropbox.com/u/1301040/blog/2010/02/party_crash_after.png"/&gt;
&lt;/div&gt;

&lt;p&gt;One boom remains. I'll have to dig in to see if this is a lib3to2 bug, lib2to3
bug, or party bug.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-8852112558455241?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/8852112558455241/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/02/updated-python-translation-party-fewer.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/8852112558455241?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/8852112558455241?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/02/updated-python-translation-party-fewer.html" title="updated Python Translation Party: fewer booms" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkcBSHozfCp7ImA9WxBVFU4.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-413708643055691545</id><published>2010-02-18T13:54:00.001-08:00</published><updated>2010-02-18T13:54:19.484-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-18T13:54:19.484-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>other Python VM's upcoming Python version plans</title><content type="html">&lt;p&gt;Some quick notes about the coming plans by the "other" Python implementations
from today's Python Language Summit at PyCon 2010:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IronPython: 
&lt;ul&gt;
&lt;li&gt;plan is to do Python 2.7 first, focus for this year&lt;/li&gt;
&lt;li&gt;python 3.2 for the end of next year hopefully&lt;/li&gt;
&lt;li&gt;other work on IDE stuff&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Pynie (i.e. Parrot) -- Allison Randall:
&lt;ul&gt;
&lt;li&gt;about 4 major features away from pure Python syntax (did dicts last
night)&lt;/li&gt;
&lt;li&gt;targetting py3k repo and test suite: should be on track for python 3.2&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Jython:
&lt;ul&gt;
&lt;li&gt;plan to target 2.6 (b/c 2to3 depends on 2.6)&lt;/li&gt;
&lt;li&gt;temporarily skip 2.7 and target 3.x (probably 3.2)&lt;/li&gt;
&lt;li&gt;then if 3.x adoption isn't fully there, then go back and add Python 2.7&lt;/li&gt;
&lt;li&gt;will require JDK 2.7 for Python 3 support (b/c of new support for
dynamic languages)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;PyPy (Holger):
&lt;ul&gt;
&lt;li&gt;plan is Benjamin will port to Python 2.7 in the summer&lt;/li&gt;
&lt;li&gt;only have slight deviations from CPython: idea is to merge back with
CPython so don't have deviations. Typcically 1 or 2 line changes in ~25
modules.&lt;/li&gt;
&lt;/ul&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/1552913144533093368-413708643055691545?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/413708643055691545/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/02/other-python-vms-upcoming-python.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/413708643055691545?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/413708643055691545?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/02/other-python-vms-upcoming-python.html" title="other Python VM's upcoming Python version plans" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DUMDQHk6cSp7ImA9WxBUEUs.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-7467035830899658835</id><published>2010-02-18T09:16:00.000-08:00</published><updated>2010-02-25T22:57:51.719-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-25T22:57:51.719-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="pythontranslationparty" /><title>Python Translation Party</title><content type="html">&lt;h2&gt;or "Why Jesse Noller owes Trent Mick a beer"&lt;/h2&gt;

&lt;p&gt;Back at the Python Language Summit at PyCon 2009 we &lt;a href="http://mail.python.org/pipermail/python-dev/2009-March/087725.html"&gt;discussed the desire for a
3to2 tool for
Python&lt;/a&gt;.
&lt;code&gt;2to3&lt;/code&gt; is a useful tool for helping with migration to Python 3 and getting a
feel for Python 3.  However, where we really want this Python 3 thing to go is
for module developers to write for Python 3 and then have a tool that (ideally)
makes the job of supporting a Python 2 version completely automatable.&lt;/p&gt;

&lt;p&gt;In a GSOC project &lt;a href="http://www.startcodon.com/wordpress/"&gt;Joe Amenta&lt;/a&gt;, mentored
by Benjamin Peterson, made that happen:
&lt;a href="http://bitbucket.org/amentajo/lib3to2/"&gt;lib3to2&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;but this post is about fun&lt;/h2&gt;

&lt;p&gt;Soon after Joe's release, &lt;a href="http://jessenoller.com/2009/08/27/python-3to2-go-check-it-out/"&gt;Jesse Noller posted to talk up
3to2&lt;/a&gt; and said:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;p.s. The first person to write an online 2to3 -&gt; 3to2 app ala &lt;a href="http://translationparty.com/"&gt;translation
  party&lt;/a&gt; gets mad props, and a bottle of
  something alcoholic at Pycon.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Game on.
&lt;a name='more'&gt;&lt;/a&gt;
I'd been looking for an idea to play with &lt;a href="http://code.google.com/appengine/"&gt;App
Engine&lt;/a&gt; that wasn't totally useless.
Alcohol's good too.&lt;/p&gt;

&lt;p&gt;The Translation Party idea: translate between English and Japanese (using
Google Translator) until equilibrium is
&lt;a href="http://translationparty.com/#6579371"&gt;found&lt;/a&gt; or
&lt;a href="http://translationparty.com/#6579360"&gt;not&lt;/a&gt;.&lt;/p&gt;

&lt;div style="font-size: 200%; text-align: center"&gt;
    &lt;a href="http://pythontranslationparty.appspot.com/"&gt;Python Translation Party&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;The Python Translation Party idea: translate between Python 2 and Python 3
(using &lt;code&gt;lib2to3&lt;/code&gt; and the new &lt;code&gt;lib3to2&lt;/code&gt;) until equilibrium is &lt;a href="http://pythontranslationparty.appspot.com/1/"&gt;found&lt;/a&gt; or &lt;a href="http://pythontranslationparty.appspot.com/2/"&gt;not&lt;/a&gt;.&lt;/p&gt;

&lt;div&gt;
&lt;img src="https://dl.dropbox.com/u/1301040/blog/2010/02/ptp.png"/&gt;
&lt;/div&gt;

&lt;p&gt;Jesse, you owe me a beer. :)
&lt;a href="http://pythontranslationparty.appspot.com/"&gt;Party on&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-7467035830899658835?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/7467035830899658835/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/02/python-translation-party.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/7467035830899658835?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/7467035830899658835?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/02/python-translation-party.html" title="Python Translation Party" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C0QBSXs5fyp7ImA9WxBWEUs.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-440395107896909365</id><published>2010-01-30T14:16:00.000-08:00</published><updated>2010-02-02T17:42:38.527-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-02T17:42:38.527-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="code.activestate.com" /><category scheme="http://www.blogger.com/atom/ns#" term="vanpyz" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="activestate" /><title>February VanPyZ meeting at ActiveState on Tuesday</title><content type="html">&lt;p&gt;The &lt;a href="http://wiki.python.org/moin/VanPyZ#NextEvent"&gt;February VanPyZ meeting&lt;/a&gt; will be hosted at ActiveState this coming Tuesday evening. &lt;strong&gt;I posted &lt;a href="http://blogs.activestate.com/2010/01/vanpyz-vancouver-python-user-group-tuesday-at-activestate/"&gt;details on my work blog&lt;/a&gt;.&lt;/strong&gt; Myself and Michael Grünewald will be speaking on &lt;a href="http://code3.activestate.com"&gt;recent ActiveState Code work&lt;/a&gt; and Brett Cannon will be speaking on his &lt;a href="http://code.google.com/p/importers/"&gt;importers project&lt;/a&gt;.  See you there.&lt;/p&gt;

&lt;p&gt;"VanPyZ" is the Vancouver Python user group.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-440395107896909365?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/440395107896909365/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/01/february-vanpyz-meeting-at-activestate.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/440395107896909365?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/440395107896909365?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/01/february-vanpyz-meeting-at-activestate.html" title="February VanPyZ meeting at ActiveState on Tuesday" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0ADRXg_eSp7ImA9WxBQFEQ.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-6902377374435275286</id><published>2010-01-14T11:02:00.000-08:00</published><updated>2010-01-14T11:02:54.641-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-14T11:02:54.641-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="komodo" /><category scheme="http://www.blogger.com/atom/ns#" term="activestate" /><title>nice I ♥ Komodo blog post</title><content type="html">Nice post on Komodo (comparing to other editors): &lt;a href="http://bshensky.livejournal.com/19843.html"&gt;Sayonara TextPad, Hello Komodo Edit&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;So, who makes an FOSS-friendly editor for Windows with the best UI that leverages Scintilla?&lt;br /&gt;
&lt;br /&gt;
In the end, I settled on Komodo Edit.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
What clinched the deal was (a) the tour of the UI that really appeared to be thoughtfully considered by its designers, and (b) the design team which has its roots in support of Perl and other FOSS initiatives for the Windows platform.  What was clear to me was that the guys at ActiveState punched away in the same languages as I did, and clearly understood what would make a best of breed coding editor, then they just went ahead and built one!&lt;br /&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-6902377374435275286?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/6902377374435275286/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2010/01/nice-i-komodo-blog-post.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/6902377374435275286?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/6902377374435275286?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2010/01/nice-i-komodo-blog-post.html" title="nice I &amp;hearts; Komodo blog post" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CE4HRXc4eCp7ImA9WxNaFk8.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-7825240258118240889</id><published>2009-11-30T10:31:00.000-08:00</published><updated>2009-11-30T15:15:34.930-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-30T15:15:34.930-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="activestate" /><title>VanPyZ meeting at ActiveState tomorrow (Tues)</title><content type="html">&lt;p&gt;We are hosting the &lt;a href="http://wiki.python.org/moin/VanPyZ#NextEvent"&gt;December VanPyZ
meeting&lt;/a&gt; at my work
(ActiveState) tomorrow night. Details:&lt;/p&gt;

&lt;h2&gt;What&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Jamu Kakar&lt;/em&gt;: How to use &lt;a href="https://storm.canonical.com/"&gt;Storm&lt;/a&gt; with a focus
on some common patterns to common problems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Doug Latornell&lt;/em&gt;: PyYAML, flickrapi, and TkInter in a Desktop Image Display
App.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Where&lt;/h2&gt;

&lt;p&gt;ActiveState &lt;br /&gt;
1700 - 409 Granville Street
(SW corner of Granville and Hastings, &lt;a href="http://tinyurl.com/activestatemap"&gt;map&lt;/a&gt;) &lt;br /&gt;
Buzzer# 1700  &lt;/p&gt;

&lt;h2&gt;When&lt;/h2&gt;

&lt;p&gt;Tuesday, December 1st, at 7PM&lt;/p&gt;

&lt;p&gt;"VanPyZ" is the Vancouver Python user group.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-7825240258118240889?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/7825240258118240889/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2009/11/vanpyz-meeting-at-activestate-tomorrow.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/7825240258118240889?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/7825240258118240889?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2009/11/vanpyz-meeting-at-activestate-tomorrow.html" title="VanPyZ meeting at ActiveState tomorrow (Tues)" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkcGQ3g9cCp7ImA9WxNbFEU.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-2466053021916334682</id><published>2009-11-17T09:43:00.000-08:00</published><updated>2009-11-17T09:47:02.668-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-17T09:47:02.668-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="django" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="patch" /><title>Small Django patch to add full traceback for wrapper exception during template rendering</title><content type="html">&lt;p&gt;&lt;a href="http://dl.getdropbox.com/u/1301040/blog/2009/11/django-template-error-traceback.patch"&gt;Here is a patch&lt;/a&gt; that I'm tending to apply to my Django (currently v1.1.1)
trees to give me a full traceback on the wrapped exception when getting an
exception during template processing. Without this patch you only get
the string summary of the underlying exception -- often far from enough info
to track down the actual bug. With this patch the result isn't that pretty (a full Python traceback as the string summary of the TemplateSyntaxError), but the info sure is helpful.&lt;/p&gt;
&lt;a name='more'&gt;&lt;/a&gt;
&lt;pre&gt;&lt;code&gt;Index: django/template/debug.py
===================================================================
--- django/template/debug.py    (revision 11742)
+++ django/template/debug.py    (working copy)
@@ -68,20 +68,23 @@
 class DebugNodeList(NodeList):
     def render_node(self, node, context):
         try:
             result = node.render(context)
         except TemplateSyntaxError, e:
             if not hasattr(e, 'source'):
                 e.source = node.source
             raise
         except Exception, e:
             from sys import exc_info
+            #TODO?: grab the "(at $file:$line)" suffix code, tack that on, propose for Django core
+            import traceback
+            e = traceback.format_exc()
             wrapped = TemplateSyntaxError(u'Caught an exception while rendering: %s' % force_unicode(e, errors='replace'))
             wrapped.source = node.source
             wrapped.exc_info = exc_info()
             raise wrapped
         return result

 class DebugVariableNode(VariableNode):
     def render(self, context):
         try:
             output = force_unicode(self.filter_expression.resolve(context))
&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-2466053021916334682?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/2466053021916334682/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2009/11/small-django-patch-to-add-full.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/2466053021916334682?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/2466053021916334682?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2009/11/small-django-patch-to-add-full.html" title="Small Django patch to add full traceback for wrapper exception during template rendering" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;CkcBRH08cSp7ImA9WxNaEE0.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-8301915369237829468</id><published>2009-11-11T00:09:00.000-08:00</published><updated>2009-11-23T10:14:15.379-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-23T10:14:15.379-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="macosx" /><title>using gmail for outbound email on Mac OS X</title><content type="html">&lt;h2&gt;Why?&lt;/h2&gt;

&lt;p&gt;At work I run a number of cron jobs: web log analysis scripts, metrics
gathering, db migration for beta versions of some sites, etc. However, one
thing I've been unable to use effectively on my Mac machines &lt;sup class="footnote-ref" id="fnref-1"&gt;&lt;a href="#fn-1"&gt;1&lt;/a&gt;&lt;/sup&gt; is
the &lt;code&gt;MAILTO&lt;/code&gt; facility of cron. Given a foo.cron script like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/bin/sh
export MAILTO=me@example.com
export SUBJECT="do some daily stuff"

...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;that is run like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;0 0 * * *  $HOME/.../foo.cron &amp;gt; $HOME/var/log/do-some-daily-stuff.log
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;any output to stderr with be mailed to "me@example.com". That is, it &lt;em&gt;would&lt;/em&gt; if outgoing email was setup for the currently running MTA (mail transfer agent) on that machine. &lt;/p&gt;

&lt;h2&gt;How?&lt;/h2&gt;

&lt;p&gt;On Mac OS X (since Leopard, I think) the default MTA is Postfix, and Postfix's terminology
for "handle outbound email" is to set the "relayhost". &lt;a href="http://www.installationexperiences.com/2008/10/using-gmail-for-outbound-smtp-on-mac-os.html"&gt;This
post&lt;/a&gt;
explains how to configure Postfix on Mac OS X 10.5 (Tiger). What follows is my
summary of the commands -- slightly different than the other post for clarity -- plus a
few thoughts.  Please read the other post for extra details.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Create `/etc/postfix/relay_password` with auth information like this:
#   smtp.gmail.com YOURNAME@gmail.com:YOURPASSWORD
$ sudo vi /etc/postfix/relay_password
$ cat /etc/postfix/relay_password
smtp.gmail.com YOURNAME@gmail.com:YOURPASSWORD

# Compile this to a Postfix lookup table...
$ sudo postmap /etc/postfix/relay_password

# ... and test it.
$ sudo postmap -q smtp.gmail.com /etc/postfix/relay_password
YOURNAME@gmail.com:YOURPASSWORD

# Download the Thawte root certificates from
# &amp;lt;https://www.verisign.com/support/roots.html&amp;gt; and setup
# a certificate for Postfix.
$ firefox https://www.verisign.com/support/roots.html
$ cd ~/Downloads
$ unzip -q roots.zip
$ sudo mkdir /etc/postfix/certs
$ sudo cp ~/Downloads/Thawte\ Root\ Certificates/Thawte\ Root\ Certificates/thawte\ Premium\ Server\ CA/Thawte\ Premium\ Server\ CA.pem /etc/postfix/certs
$ sudo c_rehash /etc/postfix/certs/
Doing /etc/postfix/certs/
Thawte Premium Server CA.pem =&amp;gt; d44d72e8.0

# Add the following lines to `/etc/postfix/main.cf`:
    relayhost = smtp.gmail.com:587
    # auth
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/relay_password
    smtp_sasl_security_options = noanonymous
    # tls
    smtp_tls_security_level = may
    smtp_tls_CApath = /etc/postfix/certs
    smtp_tls_session_cache_database = btree:/etc/postfix/smtp_scache
    smtp_tls_session_cache_timeout = 3600s
    smtp_tls_loglevel = 1
    tls_random_source = dev:/dev/urandom

# Re-start the Postfix service. (Note: You can also do the re-starting via
# `launchctl`.)
sudo postfix stop
sudo postfix start

# Now test this by sending email with `mail`:
$ /usr/bin/mail -s "testing 1 2 3" recipient@example.com
Howdy, from Postfix on your Mac!
.
EOT
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now &lt;code&gt;recipient@example.com&lt;/code&gt; should have received your test email. If not
check "/var/log/mail.log". Here is a successful log message:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Nov 10 23:33:26 mower postfix/smtp[56627]: ED1265BBA2A: to=&amp;lt;recipient@example.com&amp;gt;, relay=smtp.gmail.com[74.125.155.109]:587, delay=2.9, delays=0.44/0.94/0.56/0.96, dsn=2.0.0, status=sent (250 2.0.0 OK 1257924806 20sm930503pxi.15)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Here is a &lt;strong&gt;failing&lt;/strong&gt; log message (in this case because I'd incorrectly mixed
using "smtp.googlemail.com" instead of "smtp.gmail.com"):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Nov 10 21:32:14 mower postfix/smtp[55593]: C028D5BB6F8: to=&amp;lt;recipient@example.com&amp;gt;, relay=smtp.googlemail.com[74.125.155.16]:587, delay=0.33, delays=0.05/0.02/0.24/0.02, dsn=5.5.1, status=bounced (host smtp.googlemail.com[74.125.155.16] said: 530-5.5.1 Authentication Required. Learn more at                               530 5.5.1 http://mail.google.com/support/bin/answer.py?answer=14257 20sm817933pxi.3 (in reply to MAIL FROM command))
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;A couple thoughts&lt;/h2&gt;

&lt;p&gt;This setup requires putting your Gmail password in plaintext in
&lt;code&gt;/etc/postfix/relay_password&lt;/code&gt;, which I'm not too happy about. So I've created a
separate Gmail account with a different password to use for this.&lt;/p&gt;

&lt;p&gt;One of the beauties of this setup is that there is a record of all the emails
that have been sent this way in that Gmail account's "Sent mail".&lt;/p&gt;

&lt;h2&gt;Update (23 Nov 2009)&lt;/h2&gt;

&lt;p&gt;Note that while I've gotten this working on my 10.5 laptop, I've been *unable* to get this working on a 10.4 Mac Pro. Initially I was getting this error (in /var/log/mail.log):&lt;/p&gt;

&lt;pre&gt;Nov 22 21:54:34 kungfu postfix/smtp[8329]: 9756661DC9F5: to=&amp;lt;recipient@example.com&amp;gt;, relay=gmail-smtp-msa.l.google.com[74.125.127.109], delay=1, status=bounced (host gmail-smtp-msa.l.google.com[74.125.127.109] said: 530 5.7.0 Must issue a STARTTLS command first. 21sm2865586pzk.7 (in reply to MAIL FROM command))
&lt;/pre&gt;

&lt;p&gt;The fix for that was to add the following line to &amp;quot;/etc/postfix/main.cf&amp;quot; (and re-start postfix):&lt;/p&gt;

&lt;pre&gt;smtp_use_tls = yes
&lt;/pre&gt;

&lt;p&gt;However, now I am stuck (and currenting giving up) on this error (in &amp;quot;/var/log/mail.log&amp;quot;):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Nov 22 21:56:53 kungfu postfix/smtp[8519]: warning: Only sdbm: type allowed for btree:/etc/postfix/smtp_scache
Nov 22 21:56:53 kungfu postfix/smtp[8519]: warning: Could not open session cache btree:/etc/postfix/smtp_scache
Nov 22 21:56:54 kungfu postfix/smtp[8519]: Peer verification: CommonName in certificate does not match: smtp.gmail.com != gmail-smtp-msa.l.google.com
Nov 22 21:56:54 kungfu postfix/qmgr[8516]: warning: premature end-of-input on private/smtp socket while reading input attribute name
Nov 22 21:56:54 kungfu postfix/qmgr[8516]: warning: private/smtp socket: malformed response
Nov 22 21:56:54 kungfu postfix/qmgr[8516]: warning: transport smtp failure -- see a previous warning/fatal/panic logfile record for the problem description
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note that the naively setting &amp;quot;smtp_tls_enforce_peername = no&amp;quot; in &amp;quot;/etc/postfix/main.cf&amp;quot; did not work.&lt;/p&gt;


&lt;div class="footnotes"&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id="fn-1"&gt;
&lt;p&gt;I have a Macbook that is my main machine and a Mac Pro that is used for running most of our Komodo builds and some of the heavy log analysis scripts that I run.&amp;nbsp;&lt;a href="#fnref-1" class="footnoteBackLink" title="Jump back to footnote 1 in the text."&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-8301915369237829468?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/8301915369237829468/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2009/11/using-gmail-for-outbound-email-on-mac.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/8301915369237829468?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/8301915369237829468?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2009/11/using-gmail-for-outbound-email-on-mac.html" title="using gmail for outbound email on Mac OS X" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;DUAHRn0-fyp7ImA9WxNVEko.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-916593535330505171</id><published>2009-10-22T14:03:00.000-07:00</published><updated>2009-10-22T23:02:17.357-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-22T23:02:17.357-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="General" /><title>moving this blog to blogger</title><content type="html">&lt;p&gt;Meta note: I'm moving this blog to blogger (&lt;a href="http://trentmick.blogspot.com/"&gt;http://trentmick.blogspot.com/&lt;/a&gt;). Just test content there now. Hope to have that done in the next few days. If everything goes well, redirects should just make everything work.&lt;/p&gt;&lt;br /&gt;
&lt;b&gt;Update:&lt;/b&gt; Mostly moved. Just working on redirects now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-916593535330505171?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/916593535330505171/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2009/10/moving-this-blog-to-blogger.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/916593535330505171?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/916593535330505171?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2009/10/moving-this-blog-to-blogger.html" title="moving this blog to blogger" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DkIGRHg9fCp7ImA9WxNVEko.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-7816862869462072330</id><published>2009-07-27T15:39:00.017-07:00</published><updated>2009-10-22T22:08:45.664-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-22T22:08:45.664-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="General" /><title>Hannah Catherine Mick</title><content type="html">&lt;p&gt;&lt;a href="http://www.flickr.com/photos/trento/3687852294/" title="photo sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2662/3687852294_87913bda0e_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/trento/3687852294/"&gt;Hannah Catherine Mick&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/trento/"&gt;trento&lt;/a&gt;.
&lt;/span&gt;
&lt;br clear="all" /&gt;&lt;/p&gt;

&lt;p style=""&gt;I've been remiss in not blogging about my new daughter until now... tada! A lovely little girl. 7lb 4oz. Born on July 4th. All the appropriate bits. Everyone healthy. At times ominous hospital experience, but all good in the end. Ewan's (her almost 2 year old brother) latest thing is to kiss her on the forehead repeatedly. Big wet ones.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-7816862869462072330?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/7816862869462072330/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2009/07/hannah-catherine-mick_9911.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/7816862869462072330?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/7816862869462072330?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2009/07/hannah-catherine-mick_9911.html" title="Hannah Catherine Mick" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>3</thr:total></entry><entry gd:etag="W/&quot;DEIDQ3w9fCp7ImA9WxNUE0w.&quot;"><id>tag:blogger.com,1999:blog-1552913144533093368.post-7949454095652406525</id><published>2009-06-04T13:57:00.009-07:00</published><updated>2009-11-03T22:36:12.264-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-03T22:36:12.264-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="personal" /><category scheme="http://www.blogger.com/atom/ns#" term="ui" /><category scheme="http://www.blogger.com/atom/ns#" term="activestate" /><category scheme="http://www.blogger.com/atom/ns#" term="mozilla" /><title>pleasant things work better</title><content type="html">&lt;p&gt;I watched &lt;a href="http://www.jnd.org/"&gt;Don Norman&lt;/a&gt;'s &lt;a href="http://www.ted.com/index.php/talks/don_norman_on_design_and_emotion.html"&gt;TED Talk "3 ways good design makes you happy"&lt;/a&gt; last night:&lt;/p&gt;&lt;p&gt;&lt;object width="446" height="326"&gt;&lt;param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;param name="bgColor" value="#ffffff"&gt;&lt;/param&gt;&lt;param name="flashvars" value="vu=http://video.ted.com/talks/embed/DonNorman_2003-embed_high.flv&amp;amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/DonNorman-2003.embed_thumbnail.jpg&amp;amp;vw=432&amp;amp;vh=240&amp;amp;ap=0&amp;amp;ti=480" /&gt;&lt;embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="446" height="326" allowFullScreen="true" flashvars="vu=http://video.ted.com/talks/embed/DonNorman_2003-embed_high.flv&amp;amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/DonNorman-2003.embed_thumbnail.jpg&amp;amp;vw=432&amp;amp;vh=240&amp;amp;ap=0&amp;amp;ti=480"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;This part of his talk really stuck out for me (transcription errors mine):&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;I really had the feeling that pleasant things work better and that never made   any sense to me, until I finally figured it out. Look:&lt;/p&gt;&lt;p&gt;I'm gonna put a plank on the ground. So imagine I have a plank about 2' wide   and 30' long. And I'm going to walk on it. See I can walk on it without   looking, and go back and forth, and I can jump up and down. No problem. Now I'm   going to put the plank 300' feet in the air... and I'm not going to go near it,   thank you. Intense fear paralyzes you. It actually affects the way your brain   works.&lt;/p&gt;&lt;p&gt;...&lt;/p&gt;&lt;p&gt;If you're happy, things work better because you're more creative. You get a   little problem, you say "Ah, I'll figure it out. No big deal."&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Don Norman's ideas may be more relevant to industrial design, but I think this can safely be applied to software design (more my domain). Don points to how being fun and beautiful can make something better -- not just seem better, but &lt;em&gt;work&lt;/em&gt; better. That's an important point in the common trade off in software development between spending more time on features or bugs vs. spending some time on making a UI "pretty". Occassionally in work debates -- whether on &lt;a href="http://www.activestate.com/komodo/"&gt;Komodo&lt;/a&gt; or on some of the &lt;a href="http://www.activestate.com/"&gt;ActiveState&lt;/a&gt; websites I'm involved in -- that "pretty" is said dismissively. I'm happy to have Don Norman's talk as a debate point.&lt;/p&gt;&lt;h2&gt;Miro&lt;/h2&gt;&lt;p&gt;&lt;img src="http://dl.getdropbox.com/u/1301040/blog/2009/06/miro2.png" alt="miro" title="miro" width="94" height="78" class="alignleft size-full wp-image-115" /&gt;&lt;/p&gt;&lt;p&gt;BTW, thanks to &lt;a href="http://trentmick.blogspot.com/2009/04/re-installing-mac-os-x-software-i-use_6252.html#c2"&gt;stephen&lt;/a&gt;. A few weeks ago I reinstalled my Mac book and &lt;a href="http://trentmick.blogspot.com/2009/04/re-installing-mac-os-x-software-i-use_6252.html"&gt;posted&lt;/a&gt; a list of the software I use. Stephen suggested I add &lt;a href="http://www.getmiro.com/"&gt;Miro&lt;/a&gt; to that list. Cue many evenings of watching TED talks (including the above talk) and other programs.&lt;/p&gt;&lt;p&gt;After installing Miro, visit &lt;a href="https://miroguide.com/feeds/2014"&gt;https://miroguide.com/feeds/2014&lt;/a&gt; to get the latest TED Talks.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1552913144533093368-7949454095652406525?l=trentmick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://trentmick.blogspot.com/feeds/7949454095652406525/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://trentmick.blogspot.com/2009/06/pleasant-things-work-better_9069.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/7949454095652406525?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1552913144533093368/posts/default/7949454095652406525?v=2" /><link rel="alternate" type="text/html" href="http://trentmick.blogspot.com/2009/06/pleasant-things-work-better_9069.html" title="pleasant things work better" /><author><name>trentm</name><uri>http://www.blogger.com/profile/12705610824898039421</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="13433886039961820785" /></author><thr:total>4</thr:total></entry></feed>
