<?xml version="1.0"?>
<!-- RSS generated by Radio UserLand v8.0.7 on Thu, 20 Feb 2003 05:52:12 GMT -->
<rss version="2.0"  xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" >
	<channel>
		<title>Jon Udell: Python</title>
		<link>http://weblog.infoworld.com/udell/categories/python/</link>
		<description></description>
		<lastBuildDate>Thu, 20 Feb 2003 05:52:12 GMT</lastBuildDate>
		<dc:creator>Jon Udell, judell@mv.com</dc:creator>
		<dc:rights>Copyright 2003 Jon Udell</dc:rights>
		<dc:publisher>InfoWorld</dc:publisher>
		<item>
			<title>Shipping the prototype</title>
			<link>http://weblog.infoworld.com/udell/categories/python/2003/02/07.html#a598</link>
			<description>
&lt;img align=&quot;right&quot; vspace=&quot;8&quot; hspace=&quot;8&quot; src=&quot;http://www.selectorweb.com/images/python_guido.jpg&quot;&gt;
Years ago, when the paint was barely dry on Visual Basic 3.0, a developer showed me a CD-ROM-burning application he&apos;d written using that toolkit. The idea was to prototype the UI in Visual Basic, then rewrite in C++ for performance. But in the end, he admitted somewhat sheepishly, &quot;we shipped the prototype.&quot; I saw nothing to be ashamed of. It was -- and is -- a brilliant strategy. My only regret is that it hasn&apos;t been adopted more widely. [Full story at &lt;a href=&quot;http://www.infoworld.com/article/03/02/06/06stratdev_1.html&quot;&gt;InfoWorld.com&lt;/a&gt;]
 &lt;b&gt;...&lt;/b&gt;</description>
			<content:encoded>&lt;p&gt;
&lt;img align=&quot;right&quot; vspace=&quot;8&quot; hspace=&quot;8&quot; src=&quot;http://www.selectorweb.com/images/python_guido.jpg&quot;&gt;
Years ago, when the paint was barely dry on Visual Basic 3.0, a developer showed me a CD-ROM-burning application he&apos;d written using that toolkit. The idea was to prototype the UI in Visual Basic, then rewrite in C++ for performance. But in the end, he admitted somewhat sheepishly, &quot;we shipped the prototype.&quot; I saw nothing to be ashamed of. It was -- and is -- a brilliant strategy. My only regret is that it hasn&apos;t been adopted more widely. [Full story at &lt;a href=&quot;http://www.infoworld.com/article/03/02/06/06stratdev_1.html&quot;&gt;InfoWorld.com&lt;/a&gt;]
&lt;/p&gt;
</content:encoded>
			<dc:date>2003-02-07T08:48:30-05:00</dc:date>
			</item>
		<item>
			<title>Mitch Kapor's open source PIM to use wxPython</title>
			<link>http://weblog.infoworld.com/udell/categories/python/2002/10/21.html#a475</link>
			<description>Mitch Kapor&apos;s Open Source Applications Foundation has emerged into &lt;A href=&quot;http://blogs.osafoundation.org/mitch/&quot;&gt;blogspace&lt;/A&gt;, where Mitch says he&apos;ll chronicle its progress. The first project: a powerful, easy-to-use personal information manager for Linux, Windows, and Mac. Mitch writes: &lt;b&gt;...&lt;/b&gt;</description>
			<content:encoded>&lt;P&gt;Mitch Kapor&apos;s Open Source Applications Foundation has emerged into &lt;A href=&quot;http://blogs.osafoundation.org/mitch/&quot;&gt;blogspace&lt;/A&gt;, where Mitch says he&apos;ll chronicle its progress. The first project: a powerful, easy-to-use personal information manager for Linux, Windows, and Mac. Mitch writes:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P&gt;&lt;EM&gt;At this point, a small team has spent the better part of a year thinking through the problem space and developing the fundamentals of our approach and has just begun writing the production code. We&apos;ve made a number of fundamental decisions about the architecture and have arrived at a preliminary set of features. Andy Hertzfeld has built a terrific prototype which enabled us to explore lots of new ideas.&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;Sounds encouraging. This will be an open source project. And, of particular interest to me, the software platform is &lt;A href=&quot;http://www.wxwindows.org/&quot;&gt;wxWindows&lt;/A&gt;/&lt;A href=&quot;http://www.wxpython.org/&quot;&gt;wxPython&lt;/A&gt;. Spot on! Way back in 1999, I said in a &lt;A href=&quot;http://216.239.37.100/search?q=cache:ePGmnHE_IpgC:www.webbuildermag.com/upload/free/features/webbuilder/1999/Udell/1999-05-04.asp+udell+mahogany&amp;amp;hl=en&amp;amp;ie=UTF-8&quot;&gt;column&lt;/A&gt;:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P&gt;&lt;EM&gt;I&amp;nbsp; notice that &lt;/EM&gt;&lt;A href=&quot;http://mahogany.sourceforge.net/&quot;&gt;&lt;EM&gt;Mahogany&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt; is built using wxWindows, an open-source cross-platform GUI framework built in C++. Mahogany achieves its scriptability by embedding a Python interpreter within itself, and then supplying some Python glue modules that expose parts of the Mahogany API to Python. &lt;/EM&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;As the Mahogany docs note, and as is typical of this approach to embedded scripting: &lt;/EM&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P&gt;&lt;EM&gt;&lt;FONT face=Verdana,Geneva,Arial,Helvetica,Sans-Serif&gt;Python has access to Mahogany&apos;s internal class hierarchy. At present we supply interface definitions and Python modules for only a small number of classes, however if there is need for more classes being supported, we can easily extend the list - please ask us if you want more support!&lt;/FONT&gt; &lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;It appears that there might be another way to skin this cat. There&apos;s another open-source product, &lt;/EM&gt;&lt;A href=&quot;http://alldunn.com/wxPython/&quot;&gt;&lt;EM&gt;wxPython&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;, which encapsulates wxWindows in Python. It enables interpretive, scripted development of wxWindows applications. &lt;/EM&gt;
&lt;P&gt;&lt;EM&gt;This raises the question: why isn&apos;t&lt;STRONG&gt; &lt;/STRONG&gt;Mahogany a wxPython app, rather than a C++ app that embeds Python? If it were, no extra interface work would be needed to script-enable Mahogany, and it would be a radically programmable application. &lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;Ever since then, I&apos;ve wondered: why can&apos;t a scripting language drive a major, user-facing, GUI-intensive application? In theory, the use of a dynamic high-level language would release a lot of creative energy into a space that is desperately in need of it. In practice...well, that&apos;s what we&apos;re about to find out.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</content:encoded>
			<dc:date>2002-10-21T08:54:03-05:00</dc:date>
			</item>
		<item>
			<title>Zope lessons learned </title>
			<link>http://weblog.infoworld.com/udell/categories/python/2002/04/15.html#a190</link>
			<description>There&apos;s still much in Zope and in Python that I don&apos;t know well and can&apos;t do easily. Can this potent combination be made accessible to a wider audience -- in particular, to the kinds of folks who in an earlier era were the toolsmiths who created and shared word processor or spreadsheet macros? That&apos;s an open question to which, someday, I hope the answer will be &quot;Yes.&quot; [&lt;A href=&quot;http://www.byte.com/documents/byt1018644007316/&quot;&gt;read more at BYTE.com...&lt;/A&gt;.] &lt;b&gt;...&lt;/b&gt;</description>
			<content:encoded>&lt;P&gt;There&apos;s still much in Zope and in Python that I don&apos;t know well and can&apos;t do easily. Can this potent combination be made accessible to a wider audience -- in particular, to the kinds of folks who in an earlier era were the toolsmiths who created and shared word processor or spreadsheet macros? That&apos;s an open question to which, someday, I hope the answer will be &quot;Yes.&quot; [&lt;A href=&quot;http://www.byte.com/documents/byt1018644007316/&quot;&gt;read more at BYTE.com...&lt;/A&gt;.]&lt;/P&gt;</content:encoded>
			<dc:date>2002-04-15T20:39:49-05:00</dc:date>
			<source url="http://udell.roninhouse.com/udell.rdf">Jon Udell</source>
			</item>
		<item>
			<title>Cross-platform coffee cups</title>
			<link>http://weblog.infoworld.com/udell/categories/python/2002/03/24.html#a152</link>
			<description>&lt;FONT face=Verdana,Geneva,Arial,Helvetica,Sans-Serif&gt;Years ago I &lt;/FONT&gt;&lt;A href=&quot;http://www.ahref.com/guides/industry/199809/0914piou4.html&quot;&gt;&lt;FONT face=Verdana,Geneva,Arial,Helvetica,Sans-Serif&gt;evangelized&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana,Geneva,Arial,Helvetica,Sans-Serif&gt; the notion of a local scripting engine, serving web apps up into the browser. I thought then, and still think now, this is the biggest untapped opportunity for Perl and Python and Ruby. &lt;/FONT&gt; &lt;b&gt;...&lt;/b&gt;</description>
			<content:encoded>&lt;P&gt;&lt;FONT face=Verdana,Geneva,Arial,Helvetica,Sans-Serif&gt;Years ago I &lt;/FONT&gt;&lt;A href=&quot;http://www.ahref.com/guides/industry/199809/0914piou4.html&quot;&gt;&lt;FONT face=Verdana,Geneva,Arial,Helvetica,Sans-Serif&gt;evangelized&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana,Geneva,Arial,Helvetica,Sans-Serif&gt; the notion of a local scripting engine, serving web apps up into the browser. I thought then, and still think now, this is the biggest untapped opportunity for Perl and Python and Ruby. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana,Geneva,Arial,Helvetica,Sans-Serif&gt;Perhaps now that&amp;nbsp;Radio UserLand&amp;nbsp;has broken the ice, the&amp;nbsp;idea of a&amp;nbsp;script-based local app server will gain more traction. DJ Adams, who&amp;nbsp;uses Linux and so can&apos;t be an RU user, was intrigued by the channelroll idea. So he grabbed Rael Dornfest&apos;s &lt;/FONT&gt;&lt;A href=&quot;http://www.oreillynet.com/~rael/lang/python/peerkat/&quot;&gt;&lt;FONT face=Verdana,Geneva,Arial,Helvetica,Sans-Serif&gt;Peerkat&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana,Geneva,Arial,Helvetica,Sans-Serif&gt;&amp;nbsp; and whipped up, in Perl, &lt;/FONT&gt;&lt;A href=&quot;http://www.pipetree.com/testwiki/5335&quot;&gt;&lt;FONT face=Verdana,Geneva,Arial,Helvetica,Sans-Serif&gt;an app&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana,Geneva,Arial,Helvetica,Sans-Serif&gt; that responds to clicks on a Radio-style coffe-cup icon by injecting the specified RSS feed into an instance of Peerkat.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana,Geneva,Arial,Helvetica,Sans-Serif&gt;Very cool. RU is a lively experiment, but the publish/subscribe technology that is part of what makes RU so compelling is not, and should not be, application-specific. DJ is somebody I&apos;ll want to subscribe to, and who I&apos;ll want to subscribe to me. How we accomplish that is really beside the point.&lt;/FONT&gt;&lt;/P&gt;</content:encoded>
			<dc:date>2002-03-24T20:49:42-05:00</dc:date>
			</item>
		<item>
			<title>JavaScript, Perl, Python, .NET</title>
			<link>http://weblog.infoworld.com/udell/categories/python/2002/03/15.html#a140</link>
			<description>&lt;FONT face=Verdana,Geneva,Arial,Helvetica,Sans-Serif size=2&gt;Peter Drayton on JS.NET:&lt;/FONT&gt; &lt;b&gt;...&lt;/b&gt;</description>
			<content:encoded>&lt;P dir=ltr&gt;&lt;FONT face=Verdana,Geneva,Arial,Helvetica,Sans-Serif size=2&gt;Peter Drayton on JS.NET:&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P dir=ltr&gt;&lt;EM&gt;&lt;FONT face=Geneva,Arial,Sans-Serif size=2&gt;&amp;gt; I believe there is a market for a language much simpler than VB.NET.&lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;FONT face=Geneva,Arial,Sans-Serif size=2&gt;For this, I suggest JScript.NET, which is also included in the .NET Framework. The funny thing is, while JScript is a relatively simple language, the JScript.NET compiler is actually very sophisticated, since it has to support late binding, prototype classes, typed and typeless variables, dynamic evaluation and a slew of other &apos;scripting&apos; features. Basically the compiler does all the requisite magic to present a very friendly, simple face to programmers, while doing all the underlying goo needed to make these semantics work in the CLR. [&lt;A href=&quot;http://www.razorsoft.net/weblog/2002/03/11.html#a50&quot;&gt;Peter Drayton&lt;/A&gt;]&lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;&lt;FONT face=Verdana,Geneva,Arial,Helvetica,Sans-Serif size=2&gt;I just&amp;nbsp;tried Peter&apos;s example:&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;&lt;PRE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;&lt;FONT size=2&gt;var query = new ActiveXObject(&quot;IXSSO.Query&quot;); &lt;BR&gt;query.Columns = &quot;directory,filename&quot;; &lt;BR&gt;query.Query = &quot;@filename=*.txt&quot;; &lt;BR&gt;query.Catalog = &quot;System&quot;; &lt;BR&gt;var rs = query.CreateRecordSet(&quot;sequential&quot;); &lt;BR&gt;while (!rs.EOF) { &lt;BR&gt;&amp;nbsp; print(rs(0)+ &quot;&lt;/FONT&gt;&quot;\\&quot; + rs(1)); &lt;BR&gt;&amp;nbsp; rs.MoveNext; &lt;BR&gt;}&lt;/FONT&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Verdana,Geneva,Arial,Helvetica,Sans-Serif&gt;Interesting. Could the same principles bring this &lt;A href=&quot;http://www.activestate.com/Initiatives/NET/Research.html&quot;&gt;Perl/Python&lt;/A&gt; research to fruition?&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;</content:encoded>
			<dc:date>2002-03-15T13:08:32-05:00</dc:date>
			</item>
		<item>
			<link>http://weblog.infoworld.com/udell/categories/python/2002/01/31.html#a42</link>
			<description>Shane Caraveo from ActiveState wrote me a note illustrating how they handle WSDL for Perl: &lt;b&gt;...&lt;/b&gt;</description>
			<content:encoded>&lt;P&gt;Shane Caraveo from ActiveState wrote me a note illustrating how they handle WSDL for Perl:&lt;/P&gt;
&lt;DIV&gt;=for interface&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; static ustring echostring(ustring something); &lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;lt;soap namespace=&quot;&lt;A href=&apos;http://www.activestate.com/echo/&quot;/&apos;&gt;&lt;a href=&quot;http://www.ActiveState.com/echo/&quot;&gt;http://www.ActiveState.com/echo/&lt;/a&gt;&quot;/&lt;/A&gt;&amp;gt; &lt;/DIV&gt;
&lt;DIV&gt;=cut 
&lt;P&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;sub echostring {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $echo = shift;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $echo;&lt;BR&gt;&amp;nbsp;}&lt;/FONT&gt;&lt;/DIV&gt;
&lt;P&gt;The question is overhead. Obviously this metadata, like all documentation, requires double maintenance, and can get out of synch with the code. As a Perl programmer, would I rather pay that cost in the form of typing all my functions and variables, and have a free ride on WSDL generation, or pay it only on a per-exported-object basis?&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://radio.weblogs.com/0101679/&quot;&gt;Sam Ruby&lt;/A&gt;&amp;nbsp;and I talked about this today. He makes a good point: since exported stuff will surely be a fraction of all the stuff you write in a dynamic scripting language, why not just pay on an as-needed basis? It&apos;s an 80/20 (or 90/10) thing.&lt;/P&gt;
&lt;P&gt;The flip side of this is that web services network effects arise, I believe, when things can automatically, or almost automatically, be exported -- even when the need to do so wasn&apos;t originally anticipated. &lt;/P&gt;
&lt;P&gt;Kevin Altis, who is working these days on &lt;A href=&quot;http://sourceforge.net/projects/pythoncard/&quot;&gt;PythonCard&lt;/A&gt;, sent me this set of definitions which was in turn sent to him by &quot;an erudite reader&quot;:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P&gt;&lt;EM&gt;&quot;statically typed language&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;A language in which types are fixed at compile time. Most statically typed&lt;BR&gt;languages enforce this by requiring you to declare all variables with their&lt;BR&gt;datatypes before using them. Java and C are statically typed languages.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;dynamically typed language&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;A language in which types are discovered at execution time; the opposite of&lt;BR&gt;statically typed. VBScript and Python are dynamically typed, because they&lt;BR&gt;figure out what type a variable is when you first assign it a value.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;strongly typed language&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;A language in which types are always enforced. Java and Python are strongly&lt;BR&gt;typed. If you have an integer, you can&apos;t treat it like a string without&lt;BR&gt;explicitly converting it (more on how to do this later in this chapter).&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;weakly typed language&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;A language in which types may be ignored; the opposite of strongly typed.&lt;BR&gt;VBScript is weakly typed. In VBScript, you can concatenate the string &apos;12&apos;&lt;BR&gt;and the integer 3 to get the string &apos;123&apos;, then treat that as the integer&lt;BR&gt;123, all without any explicit conversion.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;So Python is both dynamically typed (because it doesn&apos;t use explicit&lt;BR&gt;datatype declarations) and strongly typed (because once a variable has a&lt;BR&gt;datatype, it actually matters).&quot;&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;(If you are that &quot;erudite reader&quot; and wish to be identified, just let me know.)&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P dir=ltr&gt;&lt;EM&gt;Correction: here is the &lt;/EM&gt;&lt;A href=&quot;http://diveintopython.org/odbchelper_funcdef.html&quot;&gt;&lt;EM&gt;source&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt; of this quotation: it&apos;s from Mark Pilgrim&apos;s fabulous online Python &lt;/EM&gt;&lt;A href=&quot;http://diveintopython.org/toc.html&quot;&gt;&lt;EM&gt;book-in-progress&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;. Sorry for the mixup, Kevin and Mark.&lt;/EM&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;EM&gt;Note: it&apos;s tempting to try to rewrite history by changing these entries on the fly in order to erase errors. &amp;nbsp;But that&amp;nbsp;won&apos;t last forever. Before too long, the &lt;A href=&quot;http://web.archive.org/&quot;&gt;Wayback Machine&lt;/A&gt; will catch you in the act when you try to cover your tracks :-)&lt;/EM&gt;&amp;nbsp;&lt;BR&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;Perhaps this explains why I have the&amp;nbsp;sense that if optional type declaration were going happen in any major scripting environment, it would happen first in Python. &lt;/P&gt;</content:encoded>
			<dc:date>2002-01-31T16:12:23-05:00</dc:date>
			</item>
		<item>
			<link>http://weblog.infoworld.com/udell/categories/python/2002/01/21.html#a29</link>
			<description> &lt;b&gt;...&lt;/b&gt;</description>
			<content:encoded>A Python &lt;A href=&quot;http://www.byte.com/tangledthreads/thread.jsp?forum=260&amp;amp;thread=8342&quot;&gt;introspection parable&lt;/A&gt;.</content:encoded>
			<dc:date>2002-01-21T23:38:47-05:00</dc:date>
			</item>
		</channel>
	</rss>
