<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Not this...</title>
	<atom:link href="http://blog.timbunce.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.timbunce.org</link>
	<description>Listen. Reflect. Explore. Solve.</description>
	<lastBuildDate>Thu, 29 Jul 2010 00:00:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.timbunce.org' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/eb188a9f7199a98e44133dc454d3873b?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>Not this...</title>
		<link>http://blog.timbunce.org</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.timbunce.org/osd.xml" title="Not this..." />
	<atom:link rel='hub' href='http://blog.timbunce.org/?pushpress=hub'/>
		<item>
		<title>java2perl6api &#8211; Java to Perl 6 API translation &#8211; What, Why, and Whereto</title>
		<link>http://blog.timbunce.org/2010/07/16/java2perl6api-java-to-perl-6-api-tranalation-what-why-and-whereto/</link>
		<comments>http://blog.timbunce.org/2010/07/16/java2perl6api-java-to-perl-6-api-tranalation-what-why-and-whereto/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 17:12:59 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[dbdi]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[perl6]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=460</guid>
		<description><![CDATA[In this post I&#8217;m going to talk about the java2perl6api project. What its goals are, why I think it&#8217;s important, how it relates to a Perl 6 DBI, what exists now, what&#8217;s needs doing, and how you can help. Firstly I&#8217;d like to point out that, funnily enough, I&#8217;m not very familiar with Java or [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=460&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>In this post I&#8217;m going to talk about the java2perl6api project. What its goals are, why I think it&#8217;s important, how it relates to a Perl 6 DBI, what exists now, what&#8217;s needs doing, and how you can help.<br />
<span id="more-460"></span></p>
<p>Firstly I&#8217;d like to point out that, funnily enough, I&#8217;m not very familiar with Java or Perl6. It&#8217;s entirely possible that I&#8217;ll make all sorts of errors in the following details. If you spot any do please let me know.</p>
<h2>Background</h2>
<p>The Java language ecosystem is big and mature after years of heavy investment of time and money.</p>
<p>It doesn&#8217;t have a central repository of Open Source modules like CPAN (though <a href="http://en.wikipedia.org/wiki/Apache_Maven">Maven</a> repositories <a href="http://download.java.net/maven/1/">like</a> <a href="http://repo1.maven.org/maven2/">these</a> are similar I guess). It does, however, have a number of mature high quality class libraries, and a very large number of developers familiar with those libraries (more on that below).</p>
<h2>Goals</h2>
<p>The primary goal of the java2perl6api project is to make it easy to create Perl 6 class libraries that <em>mirror</em> Java equivalents. By <em>mirror</em> I mean share the same method names and semantics at a high level (though not at a low-level, more on that below).</p>
<p>Secondary goals are to do that well enough that:</p>
<ul>
<li>the documentation for Java classes can serve as primary the documentation for the corresponding Perl 6 classes. The Perl 6 classes need only document the differences in behavior, which these should be minimal and &#8216;natural&#8217;. The same applies to books describing the Java classes.
</li>
<li>Java developers familiar with the Java classes should feel comfortable working with the corresponding Perl 6 classes.
</li>
<li>and, hopefully, some way can be found to convert test suites for the Java classes into Perl 6 code that&#8217;ll test the corresponding Perl 6 classes. (I appreciate that this is a non-trivial proposition, but there are viable approaches available, like <a href="http://www.xmlvm.org/overview/">xmlvm</a>.) Even if that can&#8217;t be done, extracting and translating tests manually is less work, and more effective, than creating them from scratch for a new API.
</li>
</ul>
<h2>Why?</h2>
<p>Firstly, creating good APIs is hard. Java APIs like <a href="http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/technotes/guides/jdbc/">JDBC 3.0</a> and <a href="http://java.sun.com/developer/technicalArticles/javase/nio/">NIO.2</a> are the result of years of professional effort and demanding commercial experience. Why not build on that experience?</p>
<p>I appreciate that Java APIs are often limited by the constraints of the language, such as the lack of closures, and that Perl 6 can probably express any given set of semantics more effectively than Java. My point here is that some Java APIs embody, however inelegantly, years of hard won experience that we can benefit from. I&#8217;d rather make new mistakes than repeat old ones.</p>
<p>Secondly, there are many more Java developers than Perl developers. Many <em>many</em> more if job vacancies are any indication:</p>
<p><img src="http://www.indeed.com/trendgraph/jobgraph.png?q=%22perl+developer%22%2C%22java+developer%22" alt="job vacancy trends for perl developer and java developer" height="300" width="540" /></p>
<p>I think we&#8217;d be foolish not to try to smooth the path for any Java developers who might be interested in Perl 6. The java2perl6api project is just one small aspect of that.</p>
<p>I really hope someone starts writing a &#8220;Perl 6 for Java Developers&#8221; tutorial. Perl 6 has the potential to become a very popular language<sup><a href="#1">1</a></sup>. Getting just a tiny percentage of Java developers (and Computer Science majors and their teachers) interested in it could be a big help.</p>
<p>Thirdly, any future DBI for Perl 6 and Parrot needs a much better foundation than the very limited and poorly defined one that <a href="http://search.cpan.org/~timb/DBI-1.611/lib/DBI/DBD.pm">underlies the Perl 5 DBI</a>. I plan to adopt the JDBC 3.0 API <em>and test suite</em> for that <em>internal</em> role. (You could call this a &#8220;Test Suite Driven Strategy&#8221;.) I&#8217;ll talk more about that in a future blog post.</p>
<h2>The History java2perl6api</h2>
<p>I&#8217;ve been kicking around various ideas for integrating Java and Perl6/Parrot for years. I think I first decided to use JDBC as the inspiration for the DBI-to-driver API in 2006.</p>
<p>You may remember back in 2004, around the 10th anniversary of the DBI, the <a href="http://www.perlfoundation.org/">Perl Foundation</a> setup a &#8220;DBI Development Fund&#8221; that people could <a href="http://dbi.perl.org/donate/">donate</a> to. I&#8217;ve never drawn any money from that fund. I want to use it to oil other peoples wheels.</p>
<p>In 2007 <a href="http://news.perlfoundation.org/2007/03/best-practical-sponsors-perl-6.html">Best Practical sponsored Perl 6 Microgrants</a> through the Perl Foundation. I asked if I could piggyback my idea for a Java to Perl 6 API translator onto their microgrant management process but using money from the DBI Development Fund. TPF and Best Practical kindly agreed. I posted a description of the task and Phil Crow volunteered and was <a href="http://news.perlfoundation.org/2007/04/phil-crow-to-create-jdbc-api-f.html">awarded the microgrant</a> in April 2007.</p>
<p>At OSCON in July 2007 I gave lightning talk called &#8220;<a href="http://www.slideshare.net/Tim.Bunce/dbi-for-parrot-and-perl-6-lightning-talk-2007">Database interfaces for open source languages suck</a>&#8221; which explained the rationale for using JDBC as a foundation for the DBI-to-driver API and mentioned Phil&#8217;s java2perl6 project.</p>
<p>Development ground to a halt around the end of 2007 for various reasons. It picked up again for a few months after OSCON 2009 (where I gave a short lightning talk asking for help) then stalled again in October. Partly because we seemed to have hit a limitation with Rakudo and partly because I was focussed on Devel::NYTProf <a href="http://blog.timbunce.org/2009/12/24/nytprof-v3-worth-the-wait/">version 3</a> and then <a href="http://blog.timbunce.org/2010/06/09/nytprof-v4-now-with-string-eval-x-ray-vision/">version 4</a>, which took <em>way</em> more time than I expected.</p>
<p>There&#8217;s life in the project again now. We&#8217;ve dodged the earlier problem, put the <a href="http://github.com/timbunce/java2perl6">code on github</a>, brought it into sync with current <a href="http://rakudo.org/">Rakudo</a> Perl 6 syntax, and generally instilled some momentum.</p>
<h2>The Current java2perl6api</h2>
<p>Let&#8217;s take a look at a simple example.</p>
<p>To generate a perl6 file that mirrors the API of the java.sql.Savepoint class you&#8217;d just execute java2perl6api like this:</p>
<pre style="background-color:#ddd;margin:2em;padding:1em;">$ java2perl6api java.sql.Savepoint
loading java.sql.Savepoint
wrote java/sql/Savepoint.pm6 - interface java.sql.Savepoint
checking java/sql/Savepoint.pm6 - interface java.sql.Savepoint
</pre>
<p>That&#8217;s loaded and parsed the description of the java.sql.Savepoint class (from the <a href="http://download.oracle.com/docs/cd/E17476_01/javase/1.5.0/docs/tooldocs/windows/javap.html">javap</a> command), generated a corresponding perl6 module, and run perl6 to validate it.</p>
<p>The generated module (with some whitespace and cruft removed) looks like this:</p>
<pre style="background-color:#ddd;margin:1em;padding:1em;">use v6;
role java::sql::Savepoint {
    method getSavepointId (
    --&gt; Int   #  int
    ) { ... }
    method getSavepointName (
    --&gt; Str   #  java.lang.String
    ) { ... }
};
=begin pod
=head1 Java
  Compiled from "Savepoint.java"
  public interface java.sql.Savepoint{
      public abstract int getSavepointId() throws java.sql.SQLException;
      public abstract java.lang.String getSavepointName() throws java.sql.SQLException;
  }
=end pod
</pre>
<p>The pod section shows the description of the class that javap returned. The java2perl6api utility parsed that <a href="http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/java/concepts/interface.html">Java interface</a> and generated the corresponding <a href="http://perlcabal.org/syn/S14.html#Roles">Perl6 role</a>. The &#8216;java.sql.Savepoint&#8217; has been mapped to &#8216;java::sql::Savepoint&#8217;. The generated methods are stubs using <code>...</code> (the &#8220;yada, yada, yada&#8221; operator). The types int and java.lang.String have been mapped to Int and Str. Because the only types used were built-ins, no type declarations were added.</p>
<p>Currently java2perl6api handles the above plus overloaded methods (which generate <a href="http://perlcabal.org/syn/S12.html#Multisubs_and_Multimethods">multi methods</a>), multiple implements clauses (which generate multiple <a href="http://perlcabal.org/syn/S14.html#Compile-time_Composition">does</a> clauses). There&#8217;s also partial support for class/interface constants (which currently generate exported methods).</p>
<p>The default behavior is to recursively process any Java types referenced by the class which aren&#8217;t mapped to Perl 6 types. So executing <code>java2perl6api java.sql.Connection</code>, for example, will generate 48 Perl 6 modules! (Because <code>java.sql.Connection</code> refers to many types, including <code>java.sql.Array</code> which refers to many types including <code>java.sql.ResultSet</code> which refers to <code>java.net.URL</code> which refers to <code>java.net.Proxy</code> etc. etc.) The <code>--norecurse</code> options disables this behavior.</p>
<p>Normally you&#8217;ll want to use the recursion but instead of letting it drill <em>all</em> the way into the Java types, you would supply your own &#8216;typemap&#8217; specification via an option. That tells java2perl6api which Java types you want to map to which Perl 6 types. So instead of recursing into the <code>java.net.URL</code> type to generate a <code>java/net/URL.pm6</code> file, for example, you can tell java2perl6api to use a specific Perl 6 type. Perhaps just <code>Str</code> for now.</p>
<h2>How this relates to JDBC / DBDI / DBI v2</h2>
<p>I want to start applying java2perl6api to the <a href="http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/technotes/guides/jdbc">JDBC</a> classes now to create a &#8220;Database Driver Interface&#8221; or &#8220;DBDI&#8221; for Perl 6.</p>
<p>Starting with the <a href="http://download-llnw.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/sql/DriverManager.html">DriverManager</a> class and the <a href="http://download-llnw.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/sql/Connection.html">Connection</a>  interface I&#8217;ll use java2perl6api to generate corresponding Perl 6 roles with <em>heavy</em> stubbing out of types. Basically anything I don&#8217;t need to think about right now will be mapped to the <code>Any</code> type.</p>
<p>I&#8217;ll start fleshing out some basic implementation logic for each in a Perl 6 class that <a href="http://perlcabal.org/syn/S14.html#Compile-time_Composition">does</a> the corresponding role. I&#8217;ll probably use PostgreSQL as the first driver and the guts of <a href="http://github.com/mberends/MiniDBI/blob/master/lib/MiniDBD/Pg.pm6">MiniDBD::Pg</a> as inspiration.</p>
<p>The first minor milestones will be creating connections, then execute non-selects, then selects then prepared statements. Somewhere along the way I expect they&#8217;ll be a Perl 6 DBDI driver implemented for the <a href="http://blogs.perl.org/users/martin_berends/2010/06/rakudo-perl-6-gets-into-databases.html">Perl 6 MiniDBI project</a>. The next key step would be to start refactoring the code heavily so anyone wanting to implement a new driver should only have to implement the driver specific parts. (There are some JDBC driver toolkits that can provide useful ideas for that.)</p>
<h2>What needs doing</h2>
<p>There&#8217;s a <a href="http://github.com/timbunce/java2perl6/blob/master/TODO">TODO file in the repository</a> that lists the current items that need working on.</p>
<p>One fairly simple item is to add a <code>--prefix</code> option to specify an extra leading name for the generated role. So <code>java.sql.Savepoint</code> with a prefix of <code>DBDI</code> would generate a <code>DBDI::java::sql::Savepoint</code> role.</p>
<p>Another item, less simple but more important, is to automatically discover the values of constants and embed them into the generated file. Probably the best way to do that is to extend <a href="http://github.com/timbunce/java2perl6/blob/master/lib/Java/Javap/javap.grammar">the parser</a> (which uses <a href="http://search.cpan.org/perldoc?Parse::RecDescent">Parse::RecDescent</a>) to parse the verbose-mode output of javap, which includes those details.</p>
<p>There are <a href="http://github.com/timbunce/java2perl6/blob/master/TODO">plenty of others</a>.</p>
<h2>How you can get involved</h2>
<p>Firstly, come and say &#8220;Hi!&#8221; in the <a href="irc://chat.freenode.net/#dbdi">#dbdi</a> IRC channel on irc.freenode.net.</p>
<p>The code is on <a href="http://github.com/timbunce/java2perl6">github</a>. You can get commit access by asking on the <a href="irc://chat.freenode.net/#perl6">#perl6</a> channel.</p>
<p>There&#8217;s also a mailing list at <a href="mailto:dbdi-dev@perl.org">dbdi-dev@perl.org</a> which you can <a href="mailto:dbdi-dev-subscribe@perl.org">subscribe</a> to.</p>
<p>I look forward to hearing from you!</p>
<hr />
<ol>
<li><a name="1"></a><br />
When I say &#8220;Perl 6 has the potential to become a very popular language&#8221; I do so with typical British <a href="http://en.wikipedia.org/wiki/Understatement">Understatement</a>.
</li>
</ol>
<br />Filed under: <a href='http://blog.timbunce.org/category/tech/software/perl/'>perl</a>, <a href='http://blog.timbunce.org/category/tech/software/'>software</a> Tagged: <a href='http://blog.timbunce.org/tag/dbdi/'>dbdi</a>, <a href='http://blog.timbunce.org/tag/java/'>java</a>, <a href='http://blog.timbunce.org/tag/perl/'>perl</a>, <a href='http://blog.timbunce.org/tag/perl6/'>perl6</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/460/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/460/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/460/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/460/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/460/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=460&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2010/07/16/java2perl6api-java-to-perl-6-api-tranalation-what-why-and-whereto/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>

		<media:content url="http://www.indeed.com/trendgraph/jobgraph.png?q=%22perl+developer%22%2C%22java+developer%22" medium="image">
			<media:title type="html">job vacancy trends for perl developer and java developer</media:title>
		</media:content>
	</item>
		<item>
		<title>NYTProf 4.04 &#8211; Came, Saw Ampersand, and Conquered</title>
		<link>http://blog.timbunce.org/2010/07/09/nytprof-4-04-came-saw-ampersand-and-conquered/</link>
		<comments>http://blog.timbunce.org/2010/07/09/nytprof-4-04-came-saw-ampersand-and-conquered/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 21:06:24 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[nytprof]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=457</guid>
		<description><![CDATA[Please forgive the title! Perl has three regular expression match variables ( $&#38; $&#8216; $&#8217; ) which hold the string that the last regular expression matched, the string before the match, and the string after the match, respectively. As you&#8217;re probably aware, the mere presence of any of these variables, anywhere in the code, even [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=457&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p><em>Please forgive the title!</em></p>
<p>Perl has three regular expression match variables ( <code>$&amp; $&lsquo; $&rsquo;</code> ) which hold the string that the last regular expression matched, the string before the match, and the string after the match, respectively.</p>
<p>As you&#8217;re probably aware, the mere presence of <em>any</em> of these variables, <em>anywhere</em> in the code, even if never accessed, will slow down <em>all</em> regular expression matches in the <em>entire</em> program. (See the WARNING at the end of the <a href="http://perldoc.perl.org/perlre.html#Capture-buffers">Capture Buffers section of the perlre documentation</a> for more information.)</p>
<p>Clearly this is not good.<br />
<span id="more-457"></span></p>
<p>I&#8217;ve long planned to add detection and reporting of this to <a href="http://search.cpan.org/dist/Devel-NYTProf/">Devel::NYTProf</a>, along with things like method cache invalidation, but it&#8217;s never risen to the top of the list. In fact, now I look, I see it never even got entered into the ever-growing collection of ideas recorded in the <a href="http://cpansearch.perl.org/src/TIMB/Devel-NYTProf-4.04/HACKING">HACKING</a> file.</p>
<p>After the 4.00 release, plus few minor releases, I&#8217;d put NYTProf on hold and was starting to focus on my java2perl6 API translation project (more news on that soon).</p>
<p>Then I saw a recent <a href="http://www.effectiveperlprogramming.com/blog/140">blog post by Josh McAdams</a>, one of the authors of <a href="http://www.amazon.com/exec/obidos/ASIN/0321496949/theeffeperl-20">Effective Perl Programming</a> (along with Joseph N. Hall and brian d foy) about detecting these variables using the <a href="http://search.cpan.org/perldoc?Devel::SawAmpersand">Devel::SawAmpersand</a> and <a href="http://search.cpan.org/perldoc?Devel::FindAmpersand">Devel::FindAmpersand</a> modules. Firstly it reminded me of the issue, and then it struck me that few people would bother using those tools because they simply <em>wouldn&#8217;t know they had the problem</em> in the first place.</p>
<p>Someone with a performance problem is likely to use a profiler like NYTProf to see where time is being spent in their code. That might point out that significant time is being spent in regular expressions, but even then they might not make the leap to consider these special match variables as a possible cause. <em>The profiler should point it out to them!</em></p>
<p>NYTProf version 4.03 didn&#8217;t. Clearly that was not good. So NYTProf version 4.04 now does!</p>
<p>In the list of files on the index page it highlights the file and adds a comment:</p>
<p><img src="http://timbunce.files.wordpress.com/2010/07/nytprof-highlighted-file-on-index-page.png?w=815&#038;h=157" alt="highlighted file on index page" border="0" width="815" height="157" /></p>
<p>On the report page for the file itself it adds an unmissable, and hopefully self-explanatory, note to the top of the page:</p>
<p><img src="http://timbunce.files.wordpress.com/2010/07/nytprof-note-on-report-page.png?w=670&#038;h=186" alt="note on report page" border="0" width="670" height="186" /></p>
<p>I&#8217;d be very interested to hear from anyone who now discovers these problem variable lurking in their application code or any CPAN modules.</p>
<p>Go take a look!</p>
<br />Filed under: <a href='http://blog.timbunce.org/category/tech/software/perl/'>perl</a> Tagged: <a href='http://blog.timbunce.org/tag/nytprof/'>nytprof</a>, <a href='http://blog.timbunce.org/tag/perl/'>perl</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/457/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/457/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/457/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/457/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/457/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=457&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2010/07/09/nytprof-4-04-came-saw-ampersand-and-conquered/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2010/07/nytprof-highlighted-file-on-index-page.png" medium="image">
			<media:title type="html">highlighted file on index page</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2010/07/nytprof-note-on-report-page.png" medium="image">
			<media:title type="html">note on report page</media:title>
		</media:content>
	</item>
		<item>
		<title>Reflections on Perl and DBI from an Early Contributor</title>
		<link>http://blog.timbunce.org/2010/07/08/reflections-on-perl-and-dbi-from-an-early-contributor/</link>
		<comments>http://blog.timbunce.org/2010/07/08/reflections-on-perl-and-dbi-from-an-early-contributor/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 12:48:27 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[cpan]]></category>
		<category><![CDATA[dbi]]></category>
		<category><![CDATA[perl4]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=449</guid>
		<description><![CDATA[The name Buzz Moschetti probably isn&#8217;t familiar to you. Buzz was the author of the Perl 4 database for Interbase known as Interperl. Back in those days Perl 5 was barely a twinkle in Larry&#8217;s eye and database interfaces for Perl 4 required building a custom perl binary. Buzz was one of the four people [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=449&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>The name Buzz Moschetti probably isn&#8217;t familiar to you. Buzz was the author of the Perl 4 database for <a href="http://en.wikipedia.org/wiki/InterBase#History">Interbase</a> known as <a href="http://cpan.perl.org/modules/dbperl/perl4/interperl/README">Interperl</a>.</p>
<p>Back in those days Perl 5 was barely a twinkle in Larry&#8217;s eye and <a href="http://cpan.perl.org/modules/dbperl/perl4/">database interfaces for Perl 4</a> required building a custom perl binary.</p>
<p>Buzz was one of the four people to get the email on September 29th 1992 from Ted Lemon that started the <a href="http://cpan.perl.org/modules/dbperl/DBI/perldb-interest/">perldb-interest</a> project which defined a <a href="http://cpan.perl.org/modules/dbperl/DBI/dbispec.v04">specification</a> that ultimately lead to the DBI. (The other people were Kurt Andersen re informix, Kevin Stock re <a href="http://cpan.perl.org/modules/dbperl/perl4/oraperl/">oraperl</a>, and Michael Peppler re <a href="http://cpan.perl.org/modules/dbperl/perl4/sybperl/">sybperl</a>. I joined a few days later.)</p>
<p><strong>Update</strong>: It turns out that it was actually Buzz who sent that original email, Ted just forwarded it on to others, including me. So Buzz can be said to have started the process that led to the DBI!</p>
<p>I hadn&#8217;t heard from Buzz for <em>many</em> years until he sent me an email recently.</p>
<p>This is his story:<span id="more-449"></span><br />
<hr />
Thought I&#8217;d share a quick story with you.</p>
<p>Recently, I was frustrated with a development team&#8217;s efforts in putting<br />
together some DB-oriented reconciliations.  The candidate solution was a<br />
blend of precompiled SQL in COBOL code, file dumps and ftps, programs to<br />
read files, more programs to read other DBs, etc. etc.   Not only was<br />
the process orchestration a project in its own right, the end-to-end<br />
logic required to accurately perform the reconciliation was distributed<br />
across several programs and platforms, diluting the knowledge base.  I<br />
knew a perl program using multiple DBD drivers to different DB engines<br />
could do it in a much cleaner way, but over the years my job has changed<br />
and although I still use perl regularly, I don&#8217;t do much in the way of<br />
DBD/DBI.   To make matters worse, one of the targets was mainframe DB2<br />
and very little work had been done here with DBD::DB2.   Also, the<br />
Sybperl module continues to be heavily used in addition to DBD::Sybase,<br />
so local DBD/DBI expertise in general is thin.  I decided to get it<br />
working on my own.</p>
<p>The infrastructure team spun up for me a Linux virtual machine with a<br />
modern build environment on it.  This had the latest gcc compilers and a<br />
firm-approved build of perl 5.8.5 right out of the box.  It took a few<br />
days of low-priority requests to get the appropriate 32bit Linux<br />
client-side SDKs for the DB2 and Sybase products but soon enough I had<br />
an environment set up with headers and shared libs.  I was ready to<br />
build some perl modules, something I haven&#8217;t done in years.</p>
<p>I went to CPAN and downloaded DBD::DB2, untar&#8217;d it, and ran perl<br />
Makefile.PL and make.  Everything worked perfectly and the whole<br />
exercise took minutes.  &#8216;make test&#8217; sets PERL_DL_NONLAZY and warned of<br />
some unused symbols not being found, but that was OK.  The rest of the<br />
tests that I expected to work with my level of permissions worked fine.<br />
&#8216;make install&#8217; worked perfectly.  Buoyed by this success, I wrote a<br />
4-liner test program just to connect and fetch some data from a table I<br />
knew about.  Outside of the test environment, however, the shared libs<br />
for DB2 were not found so I cheated and relinked and reinstalled DB2.so<br />
with the -Wl,-rpath option to &#8220;cement in&#8221; the location of those libs so<br />
I wouldn&#8217;t have to fuss with LD_LIBRARY_PATH.   My test program now<br />
worked fine.  Newly comfortable with the process, I downloaded<br />
DBD::Sybase and built and installed the module in scarcely more time than<br />
it took for the compiler to run.  In my excitement I skipped over the<br />
DBD::Sybase 4-liner test program and went straight to a slightly bigger<br />
script that used both modules and grabbed data from both DBs.  It<br />
quietly and quickly executed.  </p>
<p>Total time from initial download with almost no clues to a running<br />
example: about 40 minutes.  Later, for grin&#8217;s sake, I threw in<br />
DBD::Oracle for good measure.  That went even faster &#8212; about 5 minutes<br />
&#8211; from CPAN download to printing &#8220;Oracle connected!&#8221; because I was more<br />
familiar with the connection string syntax that is bespoke for each<br />
engine.</p>
<p>As I watched the program run, it made me reflect on how far we&#8217;ve come<br />
and how easy yet sophisticated the perl module ecosystem has become.<br />
There is no question that this multi-DBD perl program is easier to<br />
understand and support than a solution involving a set of disconnected<br />
programs, platforms, and files.  But I think it is the organization and<br />
design of the resources as a whole &#8212; DBI, DBD, CPAN, MakeMaker, pod,<br />
binary and non-binary library locations, etc. &#8212; that makes the whole<br />
environment so clear, symmetric, and easy to use with confidence.  I<br />
think back to the build environment that I used to create <a href="http://cpan.perl.org/modules/dbperl/perl4/interperl/README">interperl</a>, and<br />
the progress that has been made in terms of both breadth of module<br />
functionality and depth of framework for module build portability is<br />
simply amazing.  Perl has grown far beyond just being another language.<br />
It has a value proposition as an able integrator of widely disparate<br />
functionality.  </p>
<p>I exited the Perl mainstream some time ago but I am watching from the<br />
side and I applaud the work you&#8217;ve done in this space.</p>
<p>Take care.</p>
<hr />
<p>Thanks Buzz!</p>
<br />Filed under: <a href='http://blog.timbunce.org/category/tech/software/perl/'>perl</a> Tagged: <a href='http://blog.timbunce.org/tag/cpan/'>cpan</a>, <a href='http://blog.timbunce.org/tag/dbi/'>dbi</a>, <a href='http://blog.timbunce.org/tag/perl/'>perl</a>, <a href='http://blog.timbunce.org/tag/perl4/'>perl4</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/449/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/449/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/449/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/449/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/449/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/449/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/449/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/449/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/449/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/449/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=449&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2010/07/08/reflections-on-perl-and-dbi-from-an-early-contributor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	</item>
		<item>
		<title>Looking for a new job? TigerLead is also Hiring in Ann Arbor MI</title>
		<link>http://blog.timbunce.org/2010/07/02/looking-for-a-new-job-tigerlead-is-also-hiring-in-ann-arbor-mi/</link>
		<comments>http://blog.timbunce.org/2010/07/02/looking-for-a-new-job-tigerlead-is-also-hiring-in-ann-arbor-mi/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 19:41:27 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[jobs]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=443</guid>
		<description><![CDATA[In addition to the job vacancy in West LA, the company I work for, TigerLead.com, has an opening for a &#8220;skilled developer&#8221; in Ann Arbor, Michigan: Our work involves manipulating and warehousing external data feeds and developing web interfaces to create home search tools for prospective buyers and lead management tools for real estate agents. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=443&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>In addition to the <a href="http://blog.timbunce.org/2010/07/02/looking-for-a-new-job-tigerlead-is-hiring-in-west-la/">job vacancy in West LA</a>, the company I work for, <a href="http://www.tigerlead.com/">TigerLead.com</a>, has an opening for a &#8220;skilled developer&#8221; in Ann Arbor, Michigan:</p>
<blockquote><p> Our work involves manipulating and warehousing external data feeds and developing web interfaces to create home search tools for prospective buyers and lead management tools for real estate agents. We&#8217;re looking for a skilled coder to join our small team of talented engineers in Ann Arbor. We hope to find an experienced programmer who is a good fit with our team, well-versed in multiple languages, able to learn quickly and work independently. We work in a Linux environment, and tools and languages we use include Perl, Ruby on Rails, PostgreSQL, and GIT. Perl experience is a significant plus, but your current comfort level with any of these specific tools is less important than overall technical aptitude and ability to learn quickly and fit in well with the current team.</p></blockquote>
<p>That&#8217;s a little thin on details partly because the work is varied. If you think you might be interested, take a look at the <a href="http://annarbor.craigslist.org/eng/1804836163.html">full job posting</a>.</p>
<p>TigerLead is a lovely company to work for and this is a great opportunity. Highly recommended.</p>
<br />Filed under: <a href='http://blog.timbunce.org/category/tech/software/'>software</a> Tagged: <a href='http://blog.timbunce.org/tag/jobs/'>jobs</a>, <a href='http://blog.timbunce.org/tag/perl/'>perl</a>, <a href='http://blog.timbunce.org/tag/postgresql/'>postgresql</a>, <a href='http://blog.timbunce.org/tag/ruby/'>ruby</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/443/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/443/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/443/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/443/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/443/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/443/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/443/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/443/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/443/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/443/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=443&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2010/07/02/looking-for-a-new-job-tigerlead-is-also-hiring-in-ann-arbor-mi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	</item>
		<item>
		<title>Looking for a new job? TigerLead is Hiring in West LA</title>
		<link>http://blog.timbunce.org/2010/07/02/looking-for-a-new-job-tigerlead-is-hiring-in-west-la/</link>
		<comments>http://blog.timbunce.org/2010/07/02/looking-for-a-new-job-tigerlead-is-hiring-in-west-la/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 17:37:22 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[jobs]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=439</guid>
		<description><![CDATA[The company I work for, TigerLead.com, has an opening for a &#8220;skilled coder / database wrangler&#8221;. We&#8217;re looking for a skilled coder / database wrangler to play a key role within our Operations and Engineering teams. The various responsibilities of the job include working with the large databases underlying our real estate search tools, setting [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=439&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>The company I work for, <a href="http://www.tigerlead.com/">TigerLead.com</a>, has an opening for a &#8220;skilled coder / database wrangler&#8221;. </p>
<blockquote><p>We&#8217;re looking for a skilled coder / database wrangler to play a key role within our Operations and Engineering teams. The various responsibilities of the job include working with the large databases underlying our real estate search tools, setting up services for new clients, communicating with clients to evaluate bug reports, troubleshooting technical issues escalated by our client services team, and interfacing with the engineering team on systems maintenance and development. The scope of work that we do involves managing hundreds of external data feeds that feed into in-house databases totaling several million property listings. These listing databases power hundreds of real estate search sites used by more than a million home-buyer leads, who are tracked and cultivated by the thousands of Realtors using our management software. This position is critical to the robustness of these systems.</p></blockquote>
<p>If that sounds like interesting work to you then take a look at the <a href="http://losangeles.craigslist.org/wst/eng/1821042952.html">full job posting</a>.</p>
<p>TigerLead is a lovely company to work for and this is a great opportunity. Highly recommended.</p>
<br />Filed under: <a href='http://blog.timbunce.org/category/tech/software/'>software</a> Tagged: <a href='http://blog.timbunce.org/tag/jobs/'>jobs</a>, <a href='http://blog.timbunce.org/tag/perl/'>perl</a>, <a href='http://blog.timbunce.org/tag/postgresql/'>postgresql</a>, <a href='http://blog.timbunce.org/tag/ruby/'>ruby</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/439/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/439/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/439/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/439/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/439/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/439/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/439/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/439/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/439/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/439/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=439&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2010/07/02/looking-for-a-new-job-tigerlead-is-hiring-in-west-la/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	</item>
		<item>
		<title>New lease of life for Yahoo::Search</title>
		<link>http://blog.timbunce.org/2010/06/11/new-lease-of-life-for-yahoosearch/</link>
		<comments>http://blog.timbunce.org/2010/06/11/new-lease-of-life-for-yahoosearch/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 14:01:58 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[geo]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=405</guid>
		<description><![CDATA[I&#8217;ve recently started looking into geocoding in perl. We&#8217;re currently using some old hand-coded logic to query the Yahoo Search API. I wanted to switch to Geo::Coder::Yahoo but I noticed that that depended on Yahoo::Search which hadn&#8217;t been updated since March 2007 and had accumulated a number of bug reports (which may well be closed [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=405&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently started looking into <a href="http://blog.timbunce.org/2010/06/09/high-quality-multi-source-geocoding-in-perl/">geocoding in perl</a>. We&#8217;re currently using some old hand-coded logic to query the Yahoo Search API. I wanted to switch to <a href="http://search.cpan.org/perldoc?Geo::Coder::Yahoo">Geo::Coder::Yahoo</a> but I noticed that that depended on <a href="http://search.cpan.org/perldoc?Yahoo::Search">Yahoo::Search</a> which hadn&#8217;t been updated since March 2007 and had accumulated <a href="https://rt.cpan.org/Dist/Display.html?Name=Yahoo-Search">a number of bug reports</a> (which may well be closed by the time you read this).</p>
<p>Several related to the fact that Yahoo::Search didn&#8217;t handle Unicode properly when using its default internal XML parser (instead of the optional XML::Simple which does the right thing, but slowly).</p>
<p>What happened next makes a nice little example of getting things done in the Open Source world&#8230;<span id="more-405"></span><br />
I emailed Jeffrey Friedl, the author of Yahoo::Search, to enquire about the status of the module and saying I might be willing to help out with maintenance. He replied promptly saying he&#8217;d be delighted if someone could take it over.</p>
<p>So I created a <a href="http://github.com/timbunce/Yahoo-Search">new repository on github</a> (with the release history from the <a href="http://github.com/gitpan/Yahoo-Search">repository</a> maintained by the amazingly useful <a href="http://github.com/schwern/gitpan/blob/master/README">gitPAN project</a>).</p>
<p>Then I <a href="http://github.com/timbunce/Yahoo-Search/commits/master/">started hacking</a>, mostly adding tests and applying patches and straight-forward fixes for the open tickets. The Unicode fix turned out to be <a href="http://github.com/timbunce/Yahoo-Search/commit/677f719030b86eee0c2b22682290e58317870cd9#diff-3">reasonably small and simple</a>.</p>
<p>I also changed the distribution from using a traditional Makefile.PL over to the awesome <a href="http://dzil.org/">dzil</a> tool to reduce friction and simplify future releases.</p>
<p>Then I changed the permissions on <a href="http://pause.perl.org">PAUSE</a> to enable me to make releases and eventually, when that propagates to <a href="https://rt.cpan.org/">RT</a>, be able to maintain the bug tracker and close the tickets.</p>
<p>And finally for today, I&#8217;ve uploaded a development release to CPAN for <a href="http://www.cpantesters.org/">cpantesters</a> to smoke test. I&#8217;ll close the RT tickets in due course.</p>
<p>Once I&#8217;ve made a final release in a few days I&#8217;ll have shaved my Yahoo::Search <a href="http://en.wiktionary.org/wiki/yak_shaving">yak</a>. After that I&#8217;ve no real interest in maintaining it on an ongoing basis.</p>
<p>Could you be interested looking after a freshly shaven and sweet smelling Yahoo::Search? Available free of charge to a good home!</p>
<br />Filed under: <a href='http://blog.timbunce.org/category/tech/software/perl/'>perl</a> Tagged: <a href='http://blog.timbunce.org/tag/geo/'>geo</a>, <a href='http://blog.timbunce.org/tag/perl/'>perl</a>, <a href='http://blog.timbunce.org/tag/xml/'>xml</a>, <a href='http://blog.timbunce.org/tag/yahoo/'>yahoo</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/405/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/405/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/405/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/405/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/405/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/405/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/405/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/405/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/405/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/405/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=405&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2010/06/11/new-lease-of-life-for-yahoosearch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	</item>
		<item>
		<title>High Quality Multi-Source Geocoding in Perl</title>
		<link>http://blog.timbunce.org/2010/06/09/high-quality-multi-source-geocoding-in-perl/</link>
		<comments>http://blog.timbunce.org/2010/06/09/high-quality-multi-source-geocoding-in-perl/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 21:24:40 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[geo]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=399</guid>
		<description><![CDATA[Where I&#8217;m working at the moment we&#8217;re using the Yahoo Geocoding API but aren&#8217;t very happy with it. I&#8217;ve been asked to look into how we can improve our geo coding. Geo coding services vary greatly in accuracy, precision, availability, throughput capping, and other attributes. So it can help to try multiple services until you [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=399&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Where I&#8217;m working at the moment we&#8217;re using the Yahoo Geocoding API but aren&#8217;t very happy with it. I&#8217;ve been asked to look into how we can improve our geo coding.</p>
<p><span id="more-399"></span>Geo coding services vary greatly in accuracy, precision, availability, throughput capping, and other attributes. So it can help to try multiple services until you get <em>sufficient confidence</em> in the result.</p>
<p>It seems there are <a href="http://search.cpan.org/search?query=geocode&amp;mode=all">plenty of modules on CPAN for geocoding</a> from a single source, including Yahoo, Google, Mapquest, Multimap, Cloudmade and Bing. The only one that I could find that handles multiple services was <a href="http://search.cpan.org/perldoc?Geo::Coder::Multiple">Geo::Coder::Multiple</a>.</p>
<p>I&#8217;m writing this blog post for two reasons&#8230;</p>
<p>Firstly I&#8217;m interested in your experiences with geocoding services. Which you&#8217;ve tried, and which you&#8217;d recommend (for geocoding for US addresses). What problems you&#8217;ve encountered and any advice you&#8217;d like to pass on.</p>
<p>Secondly I&#8217;m interested in your thoughts on working with multiple services.</p>
<p><a href="http://search.cpan.org/perldoc?Geo::Coder::Multiple">Geo::Coder::Multiple</a> looks interesting but quite limited. For example, it&#8217;ll accept the first valid response even if it&#8217;s of low precision. There&#8217;s also no provision for checking multiple results to derive some measure of confidence, for &#8220;knowing when to stop&#8221;.</p>
<p>Some feature ideas:</p>
<ul>
<li>Ordered list of geocoders
</li>
<li>Auto rate limit by detecting over-limit response and disabling for a period, perhaps with exponential back-off.
</li>
<li>Result-filter callback to discard uninteresting responses, e.g., precision too low to be useful.
</li>
<li>Result-picking callback to pick best result from those collected so far. It could tell if there were more to try and return undef to mean &#8220;keep going&#8221;.
</li>
<li>Some pre-defined result-picking callbacks for common use cases.
</li>
</ul>
<p>Any thoughts on those?</p>
<p>What kind of features would you like to see?</p>
<p>Want to help build this?</p>
<br />Filed under: <a href='http://blog.timbunce.org/category/tech/software/perl/'>perl</a> Tagged: <a href='http://blog.timbunce.org/tag/geo/'>geo</a>, <a href='http://blog.timbunce.org/tag/perl/'>perl</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/399/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/399/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/399/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/399/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/399/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=399&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2010/06/09/high-quality-multi-source-geocoding-in-perl/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	</item>
		<item>
		<title>NYTProf v4 &#8211; Now with string-eval x-ray vision!</title>
		<link>http://blog.timbunce.org/2010/06/09/nytprof-v4-now-with-string-eval-x-ray-vision/</link>
		<comments>http://blog.timbunce.org/2010/06/09/nytprof-v4-now-with-string-eval-x-ray-vision/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 19:26:17 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[nytprof]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=393</guid>
		<description><![CDATA[I released Devel::NYTProf v3 on Christmas Eve 2009. Over the next couple of months a few more features were added. The v3 work had involved a complete rewrite of the subroutine profiler and heavy work on much else besides. At that point I felt I&#8217;d done enough with NYTProf for now and it was time [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=393&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I released Devel::NYTProf <a href="http://blog.timbunce.org/2009/12/24/nytprof-v3-worth-the-wait/">v3 on Christmas Eve</a> 2009. Over the next couple of months a <a href="http://blog.timbunce.org/2010/03/18/polishing-nytprof/">few more features</a> were added. The v3 work had involved a complete rewrite of the subroutine profiler and heavy work on much else besides. At that point I felt I&#8217;d done enough with NYTProf for now and it was time to focus on other more pressing projects.
</p>
<p>Over those months I&#8217;d also started working on <a href="http://blog.timbunce.org/2009/10/05/wishlist-of-plperl-enhancements-for-postgresql-8-5/">enhancements for PostgreSQL PL/Perl</a>. That project turned into something of an <em>epic adventure</em> with more than its fair share of highs and lows and twists and turns. The dust is only just settling now. I would have blogged about it but security issues arose that led the PostgreSQL team to consider removing the plperl language entirely. Fortunately I was able to help avoid that by removing Safe.pm entirely! At some point I hope to write a blog post worthy of the journey. Meanwhile, if you&#8217;re using PostgreSQL, you really do want to upgrade to the latest point-release.
</p>
<p>One of the my goals in enhancing PostgreSQL PL/Perl was improve the integration with NYTProf. I wanted to be able to profile PL/Perl code embedded in the database server. With PostgreSQL 8.4 I could get the profiler to run, with some <a href="http://github.com/timbunce/posgtresql-plperl-injector/blob/master/lib/PostgreSQL/PLPerl/Injector.pm">hackery</a>, but in the report the subroutines were all __ANON__ and you couldn&#8217;t see the source code, so there were no statement timings. <em>It was useless</em>.
</p>
<p>The key problem was that Devel::NYTProf couldn&#8217;t see into string evals properly. To fix that I <em>had</em> to go back spelunking deep in the NYTProf guts again; mostly in the data model and report generation code. With NYTProf v4, string evals are now treated as files, mostly, and a whole new level of insight is opened up!
</p>
<p>In the rest of this post I&#8217;ll be describing this and other new features.</p>
<p><span id="more-393"></span></p>
<h2>Seeing Into String Evals</h2>
<p>Let&#8217;s start by taking a look at a small example:</p>
<blockquote><p><code>perl -d:NYTProf -e 'eval("sub { $_ }")-&gt;() for 1,2,2'</code>
</p></blockquote>
<p>That executes three string evals, each of which defines an anonymous subroutine which is then executed. Two of the three evals have identical source code.</p>
<p>With NYTProf 3.11 the report for the &#8220;<code>-e</code> file&#8221; looked like this:</p>
<p><img src="http://timbunce.files.wordpress.com/2010/06/nytprof-eval-sub-example1-3111.png?w=765&#038;h=260" alt="NYTProf eval-sub example1 311.png" border="0" width="765" height="260" /></p>
<p>Two key things to note: Firstly, there&#8217;s no link to drill-down to see the actual source code executed by the eval. (In this example we can <em>see</em> the source, but that&#8217;s rare in practice.) Secondly, the three anonymous subroutines have been merged. You can&#8217;t see individual details like call counts, callers, or timings.</p>
<p>(In case you&#8217;re wondering, the main::BEGIN subroutine is defined as a side effect of loading NYTProf, and the main::RUNTIME subroutine is a dummy created by NYTProf to act as the &#8216;root caller&#8217;. You&#8217;ll see it appear as the caller of the anonymous subs in a later screenshot.)</p>
<p>With NYTProf 4.00 the same report looks like this:</p>
<p><img src="http://timbunce.files.wordpress.com/2010/06/screen-shot-2010-06-08-at-00-11-03.png?w=766&#038;h=291" alt="NYTProf eval-sub example1 400.png" border="0" width="766" height="291" /></p>
<p>Now you can see much more detail right there. The two evals with identical source code have been merged, as have the identical anonymous subroutines defined by them. The eval and anonymous sub with different source code have been kept separate. What you can&#8217;t easily see from the image is that the &#8220;<code>string eval</code>&#8221; texts in the grey annotation are links. This is where it&#8217;s gets more interesting&#8230;</p>
<p>Clicking on the &#8220;<code>2 string evals (merged)</code>&#8221; link takes us to a typical NYTProf report page showing the performance-annotated source code executed by the eval:</p>
<p><img src="http://timbunce.files.wordpress.com/2010/06/nytprof-eval-sub-example1-eval1.png?w=849&#038;h=359" alt="NYTProf eval-sub example1 eval.png" border="0" width="849" height="359" /></p>
<p>What you&#8217;re looking at here is source code <em>that never existed as a file</em>. (That second line containing a semicolon was added by perl as part of the implementation of <code>eval</code>.)</p>
<p>In the table at the top, you&#8217;ll see &#8220;Eval Invoked At&#8221; with a link that&#8217;ll take you to the eval statement that executed this source code. You&#8217;ll also see a &#8220;Sibling evals&#8221; row. That&#8217;s added in cases where an eval was executed multiple times and not all were merged into a single report. Finally, because this particular eval includes data merged from others, the report includes a clear banner alerting you to how many evals were merged to produce this report page.</p>
<p><em><strong>Update</strong>: You&#8217;ll need a recent version of perl (5.8.9+, 5.10.1+, or 5.12+) to see the eval source code.<br />
</em></p>
<p>So why does NYTProf go to all the effort of merging evals and anonymous subs? Here&#8217;s a real-world example using <a href="https://www.me.com/ix/tim.bunce/Public/perl/nytprof/nytprof-perlcritic-demo/PPI-Node-pm-56-line.html#645">a profile of perlcritic</a>:</p>
<p><img src="http://timbunce.files.wordpress.com/2010/06/nytprof-eval-sub-perlcritic1.png?w=795&#038;h=154" alt="NYTProf eval-sub perlcritic1.png" border="0" width="795" height="154" /></p>
<p>Without merging, those 4196 evals would have produced 4196 report pages! Their sheer volume making them almost useless. Now it&#8217;s clear from the report that only a few distinct source code strings are used and <a href="https://www.me.com/ix/tim.bunce/Public/perl/nytprof/nytprof-perlcritic-demo/(eval%20189)[-usr-local-perl512-dev-lib-site_perl-5-12-0-PPI-Node-pm-654]-516-line.html">the reports</a> for each are <em>far</em> more useful.</p>
<p>In that example perlcritic is compiling lots of tiny snippets of code. Many applications use string eval to compile large quantities of code. The <a href="http://search.cpan.org/perldoc?ORLite">ORLite module</a> is one example. It dynamically generates and compiles a large chunk of code with many subroutines that implement a customized interface for a specific <a href="http://www.sqlite.org/">SQLite</a> database file.</p>
<p>With NYTProf 3.11 you couldn&#8217;t <em>see</em> the hundreds of lines of source code, <em>or</em> the per-caller subroutine performance, <em>or</em> the individual statement performance. All you could see was a list of subs calls and the overall time spent in each:</p>
<p><img src="http://timbunce.files.wordpress.com/2010/06/nytprof-eval-sub-cpangraph-311.png?w=905&#038;h=249" alt="NYTProf eval-sub cpangraph 311.png" border="0" width="905" height="249" /> </p>
<p>That was better than nothing, but now, with NYTProf v4, <a href="https://www.me.com/ix/tim.bunce/Public/perl/nytprof/nytprof-cpangraph-demo/(eval%20957)[-usr-local-perl512-dev-lib-site_perl-5-12-0-ORLite-pm-586]-1097-line.html">you can see everything</a>!</p>
<div style="background-color:#eeeeee;padding:10px;">
Aside&hellip;</p>
<h2>I see a SQLite in the Distance</h2>
<p>Getting all this working correctly, especially the data model manipulations required for merging evals and anonymous subroutines, was far more painful than I&#8217;d anticipated. I both blessed and cursed the test suite on numerous occasions!</p>
<p>I think it would be wise for NYTProf reporting and data model code to read the data from, and manipulate the data in, an SQLite database. That would yield simpler more maintainable code. It would also be enable nytprofhtml to be used for presenting performance data from other sources, including perl6.</p>
<p>If you&#8217;re interested in working on this, starting with a utility to load an nytprof.out file into a SQLite database, please <a href="http://groups.google.com/group/develnytprof-dev">contact the mailing list</a>.
</div>
<p></p>
<h2>String Eval Timings</h2>
<p>There&#8217;s a slight caveat worth noting about the timings shown for string evals <em>that define subroutines</em>.</p>
<p>Timings for string evals are taken from the statement profiler (the subroutine profiler doesn&#8217;t pay attention to evals). So the &#8220;time spent executing the eval&#8221; is the sum of the time spent executing <em>any statements within the eval</em>.</p>
<p>That&#8217;s fine for evals that don&#8217;t define subroutines. For those that do, the time for the eval includes not only the time spent executing the eval itself but also time spent executing statements in subroutines defined within the eval but called later from outside it.</p>
<p>Hence the careful wording you can see in the example from perlcritic shown previously:</p>
<blockquote><pre># spent  2.65s executing statements in 1369 string evals (merged)
# includes 1.83s spent executing 122015 calls to 1 sub defined therein.</pre>
</blockquote>
<p>I could have automatically subtracted the subroutine time from the eval time but I was wary about doing that (for some reason that currently escapes me). Maybe that&#8217;ll change in the near future. Further out, a future version of NYTProf might use the subroutine profiler logic to time evals. That&#8217;s a deeper change that would give a more natural view of the timings.</p>
<h2>Other Changes in v4</h2>
<ul>
<li>Subroutines that couldn&#8217;t be associated with a perl source file, such as xsubs in packages with no perl source, used to not appear in reports at all. So associated caller and timing information couldn&#8217;t be seen. <a href="https://www.me.com/ix/tim.bunce/Public/perl/nytprof/nytprof-cpangraph-demo/usr-local-perl512-dev-bin-cpangraph-1-line.html#163">Now it can</a>.
</li>
<li>Similarly, subroutine calls that couldn&#8217;t be associated with a specific <em>line</em>, such as calls made by perl to END blocks, are now shown in reports. They appear as <a href="https://www.me.com/ix/tim.bunce/Public/perl/nytprof/nytprof-cpangraph-demo/usr-local-perl512-dev-bin-cpangraph-1-line.html#0">as calls from line 0</a>.
</li>
<li>NYTProf v3 added renaming of <code>BEGIN</code> subs, so a BEGIN (or <code>use</code>) on line 3 would be called <code>BEGIN@3</code> and so kept distinct from others in the same package. NYTProf v4 takes that further by detecting the rare cases where the modified name isn&#8217;t unique and adding a sequence number to it, like <a href="https://www.me.com/ix/tim.bunce/Public/perl/nytprof/nytprof-cpangraph-demo/(eval%20957)[-usr-local-perl512-dev-lib-site_perl-5-12-0-ORLite-pm-586]-1097-line.html#3"><code>BEGIN@3.59</code></a>.
</li>
<li>NYTProf v2 added the savesrc option to enable storing a copy of the profiled perl source code into the profile data file itself. This makes report generation immune from later changes to the source files. NYTProf v4 now enables that option by default.
</li>
<li>The report generator used to only generate report lines up to the maximum number of source lines present. If there was no source code available, for whatever reason, you&#8217;d get an empty report for that file, even though there was useful information to report. Now the report generates enough lines to ensure all available profile information gets included. This is especially useful for old perl versions where source code is more likely to be unavailable. Also, the report generator now collapses groups of three or more blank lines.
</li>
<li>Nicholas Clark contributed changes to refine the timing of the beginning and end of profiling. Now END blocks defined at runtime are included in the profile and compilation-only checks (e.g., <code>perl -c</code>) can also be profiled.
</li>
<li>You may be aware that the <code>POSIX::_exit</code> function exits the process immediately, without flushing stdio buffers and without giving perl a chance to clean up. That means NYTProf didn&#8217;t get a chance to finish and the profile wasn&#8217;t usable. NYTProf v4 now intercepts calls to <code>POSIX::_exit</code> and cleans up properly.
</li>
<li>Finally, tired of waiting for nytprofhtml to produce a report from a long profile run? The new <code>--minimal</code> (-m) option makes nytprofhtml skip building reports for the rarely used &#8216;blocks&#8217; and &#8216;subs&#8217; levels of detail and skips generating the graphviz .dot files. That saves a lot of time.
</li>
</ul>
<p>Enjoy!</p>
<br />Filed under: <a href='http://blog.timbunce.org/category/tech/software/perl/'>perl</a> Tagged: <a href='http://blog.timbunce.org/tag/nytprof/'>nytprof</a>, <a href='http://blog.timbunce.org/tag/performance/'>performance</a>, <a href='http://blog.timbunce.org/tag/postgresql/'>postgresql</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/393/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/393/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/393/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/393/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/393/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/393/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/393/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/393/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/393/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/393/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=393&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2010/06/09/nytprof-v4-now-with-string-eval-x-ray-vision/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2010/06/nytprof-eval-sub-example1-3111.png" medium="image">
			<media:title type="html">NYTProf eval-sub example1 311.png</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2010/06/screen-shot-2010-06-08-at-00-11-03.png" medium="image">
			<media:title type="html">NYTProf eval-sub example1 400.png</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2010/06/nytprof-eval-sub-example1-eval1.png" medium="image">
			<media:title type="html">NYTProf eval-sub example1 eval.png</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2010/06/nytprof-eval-sub-perlcritic1.png" medium="image">
			<media:title type="html">NYTProf eval-sub perlcritic1.png</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2010/06/nytprof-eval-sub-cpangraph-311.png" medium="image">
			<media:title type="html">NYTProf eval-sub cpangraph 311.png</media:title>
		</media:content>
	</item>
		<item>
		<title>Relaxed Perl Myths in Ann Arbor</title>
		<link>http://blog.timbunce.org/2010/05/31/relaxed-perl-myths-in-ann-arbor/</link>
		<comments>http://blog.timbunce.org/2010/05/31/relaxed-perl-myths-in-ann-arbor/#comments</comments>
		<pubDate>Mon, 31 May 2010 12:25:34 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[modern perl]]></category>
		<category><![CDATA[myths]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=383</guid>
		<description><![CDATA[Speaking of belated screencasts, I also haven&#8217;t blogged about my visit to the Ann Arbor Perl Mongers in Michigan. The Ann Arbor Perl Mongers group was being restarted (after a 10 year gap) by the TigerLead tech team. I&#8217;m working for TigerLead and was going to be in Ann Arbor for a meeting so they [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=383&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Speaking of <a href="http://blog.timbunce.org/2010/05/31/screencasts-from-the-italian-perl-workshop-2009/">belated screencasts</a>, I also haven&#8217;t blogged about my visit to the <a href="http://annarbor.pm.org/">Ann Arbor Perl Mongers</a> in Michigan.
</p>
<p>The Ann Arbor Perl Mongers group was being restarted (after a 10 year gap) by the <a href="http://www.tigerlead.com/">TigerLead</a> tech team. I&#8217;m working for TigerLead and was going to be in Ann Arbor for a meeting so they asked me to give a couple of talks: Devel::NYTProf and Perl Myths.
</p>
<p>I like giving talks at events like these because there&#8217;s no set time limit and the audience is more relaxed (the free pizza probably helped).
</p>
<p>I&#8217;ve uploaded a <a href="http://blip.tv/file/3303623">screencast of the Perl Myths talk</a>. As usual it covers the Perl jobs market, CPAN, best practices, power tools, community and perl6. At almost 1 hour 20 minutes it&#8217;s significantly longer than my usual, more rushed, 40 minute version given at conferences and includes 15 minutes of Q &amp; A at the end.</p>
<br />Filed under: <a href='http://blog.timbunce.org/category/tech/software/perl/'>perl</a> Tagged: <a href='http://blog.timbunce.org/tag/modern-perl/'>modern perl</a>, <a href='http://blog.timbunce.org/tag/myths/'>myths</a>, <a href='http://blog.timbunce.org/tag/perl/'>perl</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/383/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/383/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/383/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/383/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/383/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/383/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/383/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/383/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/383/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/383/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=383&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2010/05/31/relaxed-perl-myths-in-ann-arbor/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	</item>
		<item>
		<title>Screencasts from the Italian Perl Workshop 2009</title>
		<link>http://blog.timbunce.org/2010/05/31/screencasts-from-the-italian-perl-workshop-2009/</link>
		<comments>http://blog.timbunce.org/2010/05/31/screencasts-from-the-italian-perl-workshop-2009/#comments</comments>
		<pubDate>Mon, 31 May 2010 12:09:49 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[ipw09]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[yapc]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=381</guid>
		<description><![CDATA[I&#8217;ve just been updating the page where I keep links to my presentations and noticed that, not only had I not updated the section for the 2009 Italian Perl Workshop, but I hadn&#8217;t even uploaded the screencasts I&#8217;d made. So, with apologies for the delay, here&#8217;s my entry for IPW09, with the links to the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=381&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just been updating the page where I keep links to <a href="http://blog.timbunce.org/my-presentations/">my presentations</a> and noticed that, not only had I not updated the section for the 2009 Italian Perl Workshop, but I hadn&#8217;t even uploaded the screencasts I&#8217;d made.
</p>
<p>So, with apologies for the delay, here&#8217;s my entry for IPW09, with the links to the uploaded screencasts:
</p>
<blockquote><p>I&nbsp;<a href="http://blog.timbunce.org/2008/09/24/the-italian-perl-workshop/">had a great time</a> at IPW08 and was delighted to be invited back for IPW09, which was another great success. My contributions were two talks. The first was called &ldquo;<a href="http://conferences.yapceurope.org/ipw2009/talk/2366">DBI Oddmenti</a>&rdquo; and covered DBD::Gofer (16 minute&nbsp;<a href="http://blip.tv/file/3693768">screencast</a>), DBI::Profiler (7 minute&nbsp;<a href="http://blip.tv/file/3199117">screencast</a>), and DBDI a key component of a future DBI for Perl 6 (5 minute&nbsp;<a href="http://blip.tv/file/3693636">screencast</a>). The second was &ldquo;<a href="http://conferences.yapceurope.org/ipw2009/talk/2355">State-of-the-art Profiling with Devel::NYTProf</a>&rdquo; (40 minute&nbsp;<a href="http://blip.tv/file/2840795">screencast</a>).&#65279;</p>
<p>With 30 talks from 20 speakers on 2 tracks, IPW09 was another success for the <a href="http://www.perl.it/associazione/index.html">Italian Perl Association</a>, which was formally incorporated at the event. I&rsquo;m confident that <a href="http://conferences.yapceurope.org/ye2010/">YAPC::EU 2010</a> is in safe hands.
</p></blockquote>
<p>I&#8217;m really looking forward to YAPC::EU. We&#8217;re combining the conference with our family summer holiday. We&#8217;ll be staying in a cottage in the <a href="http://maps.google.co.uk/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=calci&amp;sll=53.800651,-4.064941&amp;sspn=16.889907,46.318359&amp;ie=UTF8&amp;hq=&amp;hnear=Calci+Pisa,+Tuscany,+Italy&amp;ll=43.723227,10.484734&amp;spn=0.161026,0.361862&amp;t=h&amp;z=12">village of Calci</a> a few miles outside Pisa.</p>
<br />Filed under: <a href='http://blog.timbunce.org/category/tech/software/perl/'>perl</a> Tagged: <a href='http://blog.timbunce.org/tag/ipw09/'>ipw09</a>, <a href='http://blog.timbunce.org/tag/presentation/'>presentation</a>, <a href='http://blog.timbunce.org/tag/yapc/'>yapc</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/381/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/381/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/381/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/381/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/381/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/381/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/381/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/381/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/381/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/381/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=381&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2010/05/31/screencasts-from-the-italian-perl-workshop-2009/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	</item>
		<item>
		<title>Polishing NYTProf</title>
		<link>http://blog.timbunce.org/2010/03/18/polishing-nytprof/</link>
		<comments>http://blog.timbunce.org/2010/03/18/polishing-nytprof/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 10:30:03 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[nytprof]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=376</guid>
		<description><![CDATA[I released Devel::NYTProf 3.0 almost three months ago, on Christmas Eve. Since then a few point releases have accumulated some changes and features worth mentioning: Jan Dubois contributed portability fixes for Windows and 64bit configurations. NYTProf should now run well on most, if not all, Windows configurations with recent versions of perl. Markus Peter contributed [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=376&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I released <a href="http://search.cpan.org/dist/Devel-NYTProf">Devel::NYTProf</a> 3.0 almost three months ago, <a href="http://blog.timbunce.org/2009/12/24/nytprof-v3-worth-the-wait/">on Christmas Eve</a>.</p>
<p>Since then a few point releases have accumulated some changes and features worth mentioning:</p>
<p><span id="more-376"></span>
<ul>
<li> Jan Dubois contributed portability fixes for Windows and 64bit configurations. NYTProf should now run well on most, if not all, Windows configurations with recent versions of perl.
</li>
<li> Markus Peter contributed a sub-microsecond timer for Mac OS X. It yields the same 100ns resolution used on systems with POSIX realtime clocks.
</li>
<li> Nicholas Clark has contributed a huge amount of work recently, including many optimizations and a <em>major</em> refactoring of I/O.
</li>
<li> Nicholas&#8217;s <code>nytprofmerge</code> utility is now significantly faster as a result of those changes. He&#8217;s also fixed a bunch of edge cases. If you&#8217;re generating multiple profile data files and would like to merge them into a single report, <code>nytprofmerge</code> is now a very effective tool.
</li>
<li>I fixed the <code>usecputime=1</code> option as it was broken in several ways. It&#8217;s still of limited value and the docs now explain that more clearly.
</li>
<li>I&#8217;ve also added a section to the docs to explain how to make NYTProf faster. For those rare cases where the performance impact of profiling is a problem.
</li>
<li>Assorted crashing bugs and odd behaviors in edge cases (like <code>goto &amp;sub</code> out of an <code>AUTOLOAD</code> being called for a <code>DESTROY</code> in perl &lt;5.8.8) have been fixed. NYTProf now also behaves more sanely with multiplicity and threads (although it still can&#039;t actually profile multiple threads or interpreters).
</li>
<li>The <code>Devel::NYTProf::PgPLPerl</code> module has been removed and the code moved to a separate <a href="http://search.cpan.org/perldoc?PostgreSQL::PLPerl::NYTProf"><code>PostgreSQL::PLPerl::NYTProf</code></a> distribution.
</li>
<li>One little UI tweak worth noting is that sortable tables now show a little arrow in the heading of the sorted column. If you didn&#8217;t know that you could click most column headings to sort by that column, hopefully the arrow will act as a visual reminder.
</li>
</ul>
<p>The only thing I&#8217;m likely to work on soon is the handling is string evals. They&#8217;re mostly hidden in the reports now. I need to improve that to make <code>PostgreSQL::PLPerl::NYTProf</code> actually <em>useful</em>. So that&#8217;s pretty much bound to happen sometime between now and my speaking at <a href="http://www.pgcon.org/2010/">PGcon</a> in May.</p>
<p>Meanwhile, if you&#8217;re not using Devel::NYTProf 3.11, <a href="http://search.cpan.org/dist/Devel-NYTProf/">upgrade</a>!</p>
<br />Filed under: <a href='http://blog.timbunce.org/category/tech/software/perl/'>perl</a> Tagged: <a href='http://blog.timbunce.org/tag/nytprof/'>nytprof</a>, <a href='http://blog.timbunce.org/tag/performance/'>performance</a>, <a href='http://blog.timbunce.org/tag/perl/'>perl</a>, <a href='http://blog.timbunce.org/tag/postgresql/'>postgresql</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/376/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=376&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2010/03/18/polishing-nytprof/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	</item>
		<item>
		<title>NYTProf v3 &#8211; Worth the wait!</title>
		<link>http://blog.timbunce.org/2009/12/24/nytprof-v3-worth-the-wait/</link>
		<comments>http://blog.timbunce.org/2009/12/24/nytprof-v3-worth-the-wait/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 23:08:54 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[nytprof]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=362</guid>
		<description><![CDATA[After more than six months, and more than a few technical hurdles, NYTProf v3 has been released at last. In this post I&#8217;ll review the major changes and significant new features. What&#8217;s new in Devel::NYTProf v3? Treemap The first big feature is a visualization of the exclusive time spent in subroutines represented as a treemap: [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=362&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>After more than six months, and more than a few technical hurdles, NYTProf v3 has been released at last.</p>
<p>In this post I&#8217;ll review the major changes and significant new features.<span id="more-362"></span><br />
<h1>What&#8217;s new in Devel::NYTProf v3?<br />
</h1>
<h2>Treemap</h2>
<p>The first big feature is a visualization of the exclusive time spent in subroutines represented as a <a href="http://en.wikipedia.org/wiki/Treemap">treemap</a>:</p>
<p><img src="http://timbunce.files.wordpress.com/2009/07/filename.png?w=770" alt="filename.png" border="0" width="770" height="550	" /></p>
<p>That&#8217;s a treemap of a profile of perlcritic 1.088. The colors don&#8217;t mean anything. They&#8217;re just used to visually group subroutines in the same package. (I&#8217;m not very happy with the colors but the <a href="http://thejit.org/">JIT toolkit</a> I&#8217;m using doesn&#8217;t make it easy to use an attractive colour range. It interpolates a value in RGB color space. It would be much better to interpolate the value in HSV color space.)</p>
<p>The treemap is interactive! If you click on a square then the treemap is redrawn &#8220;zoomed in&#8221; one package level &#8216;closer&#8217; to the package of the subroutine you clicked on.</p>
<h2>Subroutine Caller Tracking</h2>
<p>The subroutine profiler has been almost completely rewritten, yielding another major new feature. It now finds and records the name of the <em>calling</em> subroutine. (You might have assumed that NYTProf always did that. In fact it <em>guessed</em> based on the calling file and line number, and so was easily confused by nested subroutines and closures.) By properly tracking the calling subroutine NYTProf can now generate a more accurate call graph.</p>
<p>One immediate beneficiary is the nytprofcg utility (contributed by <a href="http://search.cpan.org/~clkao/">Chia-liang Kao</a>). nytprofcg reads NYTProf profile data and generates callgrind data for viewing via <a href="http://kcachegrind.sourceforge.net/html/Home.html">Kcachegrind</a>. The previous guessing behaviour limited the usefulness of nytprofcg. Now it works well, as you can see here: </p>
<p><img src="http://timbunce.files.wordpress.com/2009/07/zz4f06129a.png?w=799&#038;h=562" alt="ZZ4F06129A.png" border="0" width="799" height="562" /></p>
<p>I&#8217;ve not played with it much yet. If you do, <a href="http://groups.google.com/group/develnytprof-dev">let us know</a> how it works out for you!</p>
<p>The subroutine called <code>main::RUNTIME</code> in the image above is the fake name that NYTProf gives to &#8216;caller&#8217; of the main script code. Code run at compile time will have a top-level caller of <code>main::BEGIN</code>.</p>
<h2>BEGIN</h2>
<p>Speaking of <code>BEGIN</code>s, they&#8217;ve always been a problem because there can be many of them in a single package. Each <code>use</code> statement, for example, generates a <code>BEGIN</code> sub that&#8217;s immediately executed then discarded. Previously the data for all those <code>BEGIN</code>s was mashed together and so almost useless.</p>
<p>The NYTProf subroutine profiler now renames <code>BEGIN</code>s by appending <code>@<em>linenumber</em></code> to make them unique. A whole new level of detail is opened up by this change. (This, along with a few other new features, requires perl 5.10.1+ or 5.8.9+.)</p>
<h2>Goto</h2>
<p>NYTProf now handles <code>goto &amp;sub;</code> properly. That tail-call construct is commonly found at the end of <code>AUTOLOAD</code> subroutines&mdash;so it&#8217;s more common than you might think.</p>
<p>The calling and called subroutine call counts and timings are updated correctly. For the call graph, the destination subroutine appears to have been called by the subroutine that called the subroutine that executed the goto. In other words, if A calls B and B does a goto &amp;C, that call to C will show A as the caller. That fits the way goto &amp;sub works, and ensures inclusive and exclusive times make sense.</p>
<h2>Slow Opcode Profiling</h2>
<p>This is another major new feature. NYTProf can now profile the time spent executing certain opcodes (the lowest-level units of execution in the perl interpreter).</p>
<p>I originally envisaged adding the mechanism for opcodes that corresponded to system calls (read, write, mkdir, chdir etc.) and called the feature &#8216;sys ops&#8217;. Then I realised there were other perl opcodes that would be worth profiling. The main two being <code>match</code> (<code>m/.../</code>) and <code>subst</code> (<code>s/.../.../</code>). So now the NYTProf subroutine profiler can now profile time spent in regular expressions!</p>
<p>Here&#8217;s an example:</p>
<p><img src="http://timbunce.files.wordpress.com/2009/08/zz1f7ce510.png?w=755&#038;h=235" alt="ZZ1F7CE510.png" border="0" width="755" height="235" /></p>
<p>The opcodes are given pseudo-subroutine names <em>in the package that invoked the opcode</em> with &#8220;<code>CORE:</code>&#8221; prepended to the opcode name. In the example above you can see  two instances of <code>CORE:match</code>. One accounting for matches performed in the <code>main::</code> package, and another accounting for matches performed in the <code>File::Find::</code> package. (They&#8217;re marked &#8216;xsub&#8217; above but I&#8217;ve changed that to &#8216;opcode&#8217; now.)</p>
<p>Profiling of &#8216;slowops&#8217;, as I&#8217;ve called them, is controlled by the <code>slowops=N</code> option. A value of 0 turns off slowop profiling. A value of 2 (the default) gives the behaviour shown above, with opcodes called in different packages being accounted for separately. A value of 1 will put all the slowops into a single package named &#8220;<code>CORE::</code>&#8220;.</p>
<h2>GraphViz</h2>
<p>Another spin-off from the work on call graphs: NYTProf now also outputs representations of the subroutine call graph as GraphViz <a href="http://en.wikipedia.org/wiki/DOT_language">dot language</a> files. These can be rendered by<br />
<a href="http://www.graphviz.org/">a variety of viewers</a>. I use <a href="http://www.pixelglow.com/graphviz/">GraphViz by pixelglow</a>.</p>
<p>Here&#8217;s a simple example showing the calling relationship between packages in a little demo script I use for testing:</p>
<p><img src="http://timbunce.files.wordpress.com/2009/08/subs-callgraph.png?w=514&#038;h=282" alt="subs-callgraph.png" border="0" width="514" height="282" /></p>
<p>The dot file for that inter-package view is available as a link on the top-level index page of the report.</p>
<p>On the individual report pages for each source file there&#8217;s a link to another dot file. This one shows the calls into, out of, and between the subroutines in package(s) in that source file. For example, here&#8217;s the call graph for the subs in the File::Find module:</p>
<p><img src="http://timbunce.files.wordpress.com/2009/08/call-graphviz-file-find-pm.png?w=682&#038;h=365" alt="call-graphviz-File-Find-pm.png" border="0" width="682" height="365" /></p>
<p>There are many things that could be improved with that graph, such as adding call counts. Overall though, I&#8217;m pretty happy with it.</p>
<h2>Report Format Changes</h2>
<p>There have been some changes to the main report columns:</p>
<p><img src="http://timbunce.files.wordpress.com/2009/08/zz5dc6382a.png" alt="ZZ5DC6382A.png" border="0"/></p>
<p>There are two new columns, &#8220;Calls&#8221; and &#8220;Time in Subs&#8221;. They show the number of subroutine calls executed on that line, and the total time spent in those subroutines due to those calls. Both are color coded, <em>relative to the other values in the same columns</em>, using the same <a href="http://en.wikipedia.org/wiki/Median_absolute_deviation">Median Average Deviation</a> that&#8217;s used elsewhere.</p>
<p>To make room for the new columns, the column showing the average statement execution time has been removed (it wasn&#8217;t much use anyway) and the column headings tightened up. The average value, if you&#8217;re interested, is available as a tool-tip, as shown above.</p>
<h2>New Options</h2>
<p>A few new options have been added, including:</p>
<ul>
<li><code>sigexit=<em>S</em> </code> Some signals will abort a process leaving a corrupt profile data file. The <code>sigexit</code> option can be used to tell NYTProf to catch those signals and close the profile cleanly before exiting.
</li>
<li><code>forkdepth=<em>N</em> </code>When a process being profiled is forked the child process is also profiled. The <code>forkdepth=N</code> option can be used to limit the number of generations that are profiled. The default is -1 (all generations). A value of 0 effectively disables profiling of child processes.
</li>
<li><code>log=<em>F</em> </code>If you enable NYTProf trace output, via the <code>trace=<em>N</em></code> option, it&#8217;s normally written to stderr. The <code>log=<em>F</em> </code> can be used to write the log to a specific file instead.
</li>
</ul>
<h2>nytprofmerge</h2>
<p>As I mentioned above, when a profiled process forks, the child is also profiled, with the profile being written to a new file. So processes which have many children, like mod_perl, end up with many profile data files. Naturally many people have expressed a wish for NYTProf to be able to merge multiple profiles into a single report. Sadly no one has stepped up actually do the work, till now.</p>
<p><a href="http://www.ccl4.org/~nick/">Nicholas Clark</a>, who contributed the great <a href="http://blog.timbunce.org/2008/10/03/nytprof-204-gives-you-90-smaller-data-files/">zip compression</a> for v2.04 (and a major contributor to the perl core and pumpkin for the 5.8.2+ releases) has come up trumps again. NYTProf v3 includes a new nytprofmerge utility that&#8217;ll read multiple profiles and write out a new, merged, profile. It&#8217;s very new, and somewhat experimental, but answers a very real need. Give it a whirl and <a href="http://groups.google.com/group/develnytprof-dev">let us know</a> how it goes. </p>
<h2>Screencast</h2>
<p>I gave a talk on Devel::NYTProf at the (excellent) <a href="http://conferences.yapceurope.org/ipw2009">Italian Perl Workshop</a> in October. I covered both the features in version 3 and the phased approach I take to optimizing perl code. You can <a href="http://blip.tv/file/2840795">watch the screencast</a>.</p>
<h2>And finally</h2>
<p>For more information on the changes in Devel::NYTProf v3 you can <a href="http://search.cpan.org/~timb/Devel-NYTProf-3.00/Changes">read the Changes file</a>.</p>
<p>It&#8217;s <a href="http://en.wikipedia.org/wiki/Christmas_Eve">Christmas Eve</a> here in Ireland. After days, and nights, of hard frost the countryside is spectacularly encased in tiny ice crystals sparking in the bright sunshine. I&#8217;m delighted to have stumbled into working on NYTProf. It&#8217;s a great project at the intersection of two of my professional passions: performance and visualization. And I&#8217;m delighted to give you NYTProf v3 in time for <em>this</em> Christmas.</p>
<p>Enjoy!</p>
<p>Tim.</p>
<br />Posted in perl Tagged: nytprof <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/362/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=362&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/12/24/nytprof-v3-worth-the-wait/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2009/07/filename.png" medium="image">
			<media:title type="html">filename.png</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2009/07/zz4f06129a.png" medium="image">
			<media:title type="html">ZZ4F06129A.png</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2009/08/zz1f7ce510.png" medium="image">
			<media:title type="html">ZZ1F7CE510.png</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2009/08/subs-callgraph.png" medium="image">
			<media:title type="html">subs-callgraph.png</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2009/08/call-graphviz-file-find-pm.png" medium="image">
			<media:title type="html">call-graphviz-File-Find-pm.png</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2009/08/zz5dc6382a.png" medium="image">
			<media:title type="html">ZZ5DC6382A.png</media:title>
		</media:content>
	</item>
		<item>
		<title>&#8220;Help Saving MySQL!&#8221;</title>
		<link>http://blog.timbunce.org/2009/12/13/help-saving-mysql/</link>
		<comments>http://blog.timbunce.org/2009/12/13/help-saving-mysql/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 17:23:26 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=360</guid>
		<description><![CDATA[Michael &#8220;Monty&#8221; Widenius, the creator of MySQL, has asked me, among many others, to help spread the word about an imminent decision by the European Commission on the Oracle merger with Sun. Why should you care? Monty&#8217;s view, along with others, is that Oracle has much more to gain from neglecting MySQL than it has [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=360&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Michael &#8220;Monty&#8221; Widenius, the creator of MySQL, has asked me, among many others, to help spread the word about an imminent decision by the European Commission on the Oracle merger with Sun.</p>
<p>Why should you care? Monty&#8217;s view, <a href="http://keionline.org/ec-mysql">along with others</a>, is that Oracle has much more to gain from neglecting MySQL than it has to gain from enhancing it.</p>
<p>Why should you act now? It seems that &#8220;Oracle has instead contacted hundreds of their big customers and asked them to write to the EC and require unconditional acceptance of the deal.&#8221; To balance this the European Commission needs to hear voices from the other side of the story. The European Commission is due to make a decision in just a couple of weeks.</p>
<p>What should you do? Read <a href="http://monty-says.blogspot.com/2009/12/help-saving-mysql.html">Monty&#8217;s post</a> and act on it, if you so choose.</p>
<br />Posted in tech Tagged: mysql, oracle <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/360/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=360&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/12/13/help-saving-mysql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	</item>
		<item>
		<title>Wishlist of PL/Perl Enhancements for PostgreSQL 8.5</title>
		<link>http://blog.timbunce.org/2009/10/05/wishlist-of-plperl-enhancements-for-postgresql-8-5/</link>
		<comments>http://blog.timbunce.org/2009/10/05/wishlist-of-plperl-enhancements-for-postgresql-8-5/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 22:00:42 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[plperl]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=344</guid>
		<description><![CDATA[I&#8217;m working with PostgreSQL for my day job, and liking it. We&#8217;re fairly heavy users of stored procedures implemented in PL/Perl, with ~10,000 lines in ~100 functions (some of which have bloated to painful proportions). This creates some interesting issues and challenges for us. There&#8217;s a window of opportunity now to make improvements to PL/Perl [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=344&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working with PostgreSQL for my day job, and liking it.</p>
<p>We&#8217;re fairly heavy users of stored procedures implemented in PL/Perl, with ~10,000 lines in ~100 functions (some of which have bloated to painful proportions). This creates some interesting issues and challenges for us.</p>
<p>There&#8217;s a window of opportunity <em>now</em> to make improvements to PL/Perl for PostgreSQL 8.5. I&#8217;m planning to work with <a href="http://developer.postgresql.org/~adunstan/">Andrew Dunstan</a> to agree on a set of changes and develop the patches.</p>
<p>As a first step along that road I want to map out here the changes I&#8217;m thinking of and to ask for comments and suggestions.</p>
<p><span id="more-344"></span><br />
<h2>Goals:</h2>
<ul>
<li>Enable modular programming by pre-loading user libraries.</li>
<li>Soften the hard choice between plperl and <a href="http://www.postgresql.org/docs/8.4/interactive/plperl-trusted.html">plperlu</a>, so there&#8217;s less reason to &#8220;give up&#8221; and use plperlu.</li>
<li>Improve performance.</li>
<li>Improve flexibility for future changes.</li>
<li>Enable use of tracing/debugging tools.</li>
</ul>
<h2>Specific Proposals:</h2>
<ol>
<li><strong>Enable configuration of perl at initialization</strong></li>
<p>Add ability to specify in postgresql.conf some code to be run when a perl interpreter is initialized. For example:</p>
<p><code>plperl.at_init_do = 'use lib qw(/path/to/mylib); use MyPlPerlUtils; use List::Util qw(sum);'</code></p>
<li><strong>Configure extra items to be shared with the Safe compartment</strong></li>
<p>The Safe compartment used for plperl functions can&#8217;t access any namespace outside the compartment. So, by default, any subroutines defined by libraries loaded via <code>plperl.at_init_do</code> won&#8217;t be callable from plperl functions.</p>
<p>Some mechanism is needed to specify which extra subroutines, and/or variables, should be shared with the Safe compartment. For example:</p>
<p><code>plperl.safe_share = '$foo, myfunc, sum'</code></p>
<li><strong>Permit some more opcodes in the Safe compartment</strong></li>
<p>I&#8217;d like to add the following opcodes to the set of opcodes permitted in the Safe compartment: <code>caller, dbstate, tms</code>.</p>
<li><strong>Execute END blocks at process end</strong></li>
<p>Currently PostgreSQL doesn&#8217;t execute END blocks when the backend postgres process exits (oddly, it actually executes them immediately after initializing the interpreter). Fixing that would greatly simplify use of tools like NYTProf that need to know when the interpreter is exiting. <em>Updated: used to say &#8220;at server shutdown&#8221; which was wrong.</em></p>
<li><strong>Name PL/Perl functions</strong></li>
<p>Currently PL/Perl functions are compiled as anonymous subroutines. Applying the same technique as the <a href="http://search.cpan.org/perldoc?Sub::Name">Sub::Name</a> module would allow them have &#8216;more useful&#8217; names than the current &#8216;__ANON__&#8217;.</p>
<p>For a PL/Perl function called &#8220;foo&#8221;, a minimal implementation would use a name like &#8220;foo__id54321&#8243; where 54321 is the oid of the function. This avoids having to deal with polymorphic functions (where multiple functions have the same name but different arguments). </p>
<p>The names won&#8217;t enable inter-function calling and may not even be installed in the symbol table. They&#8217;re just to improve error messages and to enable use of tools like <a href="http://code.google.com/p/perl-devel-nytprof/source/browse/trunk/lib/Devel/NYTProf/PgPLPerl.pm">Devel::NYTProf:: PgPLPerl</a> (as yet unreleased).</p>
<li><strong>Miscellaneous updates to the PL/Perl documentation</strong></li>
<p>To document the new functionality and expand/update the related text.</p>
<li><strong>Improve Performance</strong></li>
<p>It seems likely that there&#8217;s room for improvement. Some code profiling is needed first, though, so I&#8217;ll leave this one vague for now.</p>
</ol>
<p>Any comments on the above?<br />
Anything you&#8217;d like to add?</p>
<p>If so, speak up, time is short!<br />
<hr />
<div style="font-size:-2px;">
<h2>Footnote</h2>
<p>For completeness I&#8217;ll mention that I was thinking of adding a way to permit extra opcodes (plperl.safe_permit=&#8217;caller&#8217;) and a way to use a subclass of the Safe module (plperl.safe_class=&#8217;MySafe&#8217;). I dropped them because I felt the risks of subtle security issues outweighed the benefits. Any requirements for which these proposals seem like a good fit can also be met via <code>plperl.at_init_do</code> and <code>plperl.safe_share</code>.</div></p>
<br />Posted in perl Tagged: plperl, postgresql <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/344/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=344&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/10/05/wishlist-of-plperl-enhancements-for-postgresql-8-5/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	</item>
		<item>
		<title>The Voyage</title>
		<link>http://blog.timbunce.org/2009/10/04/the-voyage/</link>
		<comments>http://blog.timbunce.org/2009/10/04/the-voyage/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 22:39:51 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[local]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=342</guid>
		<description><![CDATA[We saw Johnny Duhan in a very small, intimate, concert in Ennis last year. Last weekend we saw Christy Moore in concert in Limerick. This song, written by Johnny Duhan and sung by Christy Moore, has always struck a cord with me. I am a sailor, you&#8217;re my first mate We signed on together, we [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=342&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>We saw Johnny Duhan in a very small, intimate, concert in Ennis last year. Last weekend we saw Christy Moore in concert in Limerick. This song, written by Johnny Duhan and sung by Christy Moore, has always struck a cord with me.</p>
<blockquote>
<p>I am a sailor, you&#8217;re my first mate<br />
We signed on together, we coupled our fate<br />
Hauled up our anchor, determined not to fail<br />
For the hearts treasure, together we set sail</p>
<p>With no maps to guide us we steered our own course<br />
Rode out the storms when the winds were gale force<br />
Sat out the doldrums in patience and hope<br />
Working together we learned how to cope</p>
<p><em>Chorus:</em><br />
Life is an ocean and love is a boat<br />
In troubled water that keeps us afloat<br />
When we started the voyage, there was just me and you<br />
Now gathered round us, we have our own crew</p>
<p>Together we&#8217;re in this relationship<br />
We built it with care to last the whole trip<br />
Our true destination&#8217;s not marked on any charts<br />
We&#8217;re navigating to the shores of the heart</p>
<p><em>Chorus 2x</em>
</p></blockquote>
<p> &#8211; Johnny Duhan</p>
<p>Here&#8217;s a <a href="http://www.youtube.com/watch?v=sRPY3FLfmco">video</a> of Christy Moore and Johnny Duhan talking about the song and singing it together.</p>
<br />Posted in life, local Tagged: music, video <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/342/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=342&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/10/04/the-voyage/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	</item>
		<item>
		<title>Perl Myths and Mongers in Dublin</title>
		<link>http://blog.timbunce.org/2009/09/22/perl-myths-and-mongers-in-dublin/</link>
		<comments>http://blog.timbunce.org/2009/09/22/perl-myths-and-mongers-in-dublin/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 21:41:26 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[ireland]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[jobs]]></category>
		<category><![CDATA[graphs]]></category>
		<category><![CDATA[myths]]></category>
		<category><![CDATA[perl6]]></category>
		<category><![CDATA[ossbarcamp]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=339</guid>
		<description><![CDATA[Last weekend I went up to Dublin to speak at OSSBarcamp. I took the train from Limerick on Friday so I&#8217;d already be in Dublin the following morning, without having to get up at the crack of dawn. Dublin.pm Aidan Kehoe and I had a very small but interesting Dublin.pm meeting that night. Their first [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=339&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Last weekend I went up to Dublin to speak at <a href="http://www.ossbarcamp.com/">OSSBarcamp</a>. I took the train from Limerick on Friday so I&#8217;d already be in Dublin the following morning, without having to get up at the crack of dawn.</p>
<h2>Dublin.pm</h2>
<p>Aidan Kehoe and I had a very small but interesting Dublin.pm meeting that night. Their first since 2004! Our wide-ranging discussions that night included me trying to understand what led Dublin.pm to flounder instead of flourish. I think a key factor was the (implicit?) expectation that members should make technical presentations.</p>
<p>Living in the west of Ireland there aren&#8217;t enough local Perl users (that I&#8217;ve found so far) to have a viable Perl Mongers group. So I setup the <a href="http://www.meetup.com/limerick-open-source/">Limerick Open Source</a> meetup instead.</p>
<p>Here&#8217;s what worked for us: We sit around in a quiet comfy hotel bar and chat. Naturally the chat tends towards the technical, and laptops are produced and turned around to illustrate a point or show results of a search, a chunk of video etc. There&#8217;s no set agenda, no declared topics, and no presentations. And yet, I think it&#8217;s fair to say, that everyone who&#8217;s come along has learnt interesting (albeit random) stuff.</p>
<p>I&#8217;d like to hear from perl mongers, in groups of all sizes, what kinds of balance between the social and technical aspects of Perl Mongers meetings works (or doesn&#8217;t work) for you.</p>
<h2>OSSBarcamp</h2>
<p>At OSSBarcamp I gave a ~15 minute &#8216;lightning talk&#8217; on Devel::NYTProf in the morning, and a ~50 minute talk on Perl Myths in the afternoon.</p>
<p>The Perl Myths talk was a major update to my <a href="http://www.slideshare.net/Tim.Bunce/perl-myths-200802">previous version</a>, now over 18 months old, incorporating lots of updated graphs and <a href="http://blog.timbunce.org/2009/08/13/help-me-update-my-perl-myths-talk-for-2009/">other fresh information</a>.</p>
<p>There is so much happy vibrant productive life in the Perl community that updating the presentation has been lovely experience. I keep having to revise the numbers on the slides upwards. There are lots of great graphs and they&#8217;re all going upwards too! (Many thanks to <a href="http://barbie.missbarbell.co.uk/">Barbie</a> for the great new graphs of CPAN stats.)</p>
<p>I&#8217;ve put a PDF of the slides, with notes, <a href="http://www.slideshare.net/Tim.Bunce/perl-myths-200909">on slideshare</a>. Best viewed full-screen or downloaded.</p>
<p>I made a screencast but I think I&#8217;ll hang on to that until after I give the same talk, updated again, at the <a href="http://conferences.yapceurope.org/ipw2009/">Italian Perl Workshop</a> (IPW09) in Pisa in October &mdash; I&#8217;m really looking forward to that! I&#8217;ll make another screencast there and decide then which to upload.</p>
<p>After OSSBarcamp last week, and before IPW09 in late October, I&#8217;ll be flying to Moscow, visa permitting, to give a talk at the <a href="http://www.highload.ru/">HighLoad++</a> (<a href="http://translate.google.com.au/translate?u=http%3A%2F%2Fwww.highload.ru&amp;sl=ru&amp;tl=en&amp;hl=en&amp;ie=UTF-8">translated</a>) conference. I&#8217;ve never been to Russia before so that&#8217;s going to be an amazing experience!</p>
<br />Posted in ireland, perl Tagged: conference, graphs, jobs, language, myths, ossbarcamp, perl6, presentation <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/339/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=339&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/09/22/perl-myths-and-mongers-in-dublin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	</item>
		<item>
		<title>Perl in five sentences</title>
		<link>http://blog.timbunce.org/2009/09/10/perl-in-five-sentences/</link>
		<comments>http://blog.timbunce.org/2009/09/10/perl-in-five-sentences/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 12:00:54 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[myths]]></category>
		<category><![CDATA[presentation]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=326</guid>
		<description><![CDATA[I just added a concluding slide to my updated Perl Myths talk. Having comprehensively debunked some myths with hard facts about perl and its ecosystem, I wanted to end with a slide that summarized some truths. I liked the slide text so much I wanted to share it with you: Perl: has a massive library [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=326&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I just added a concluding slide to my updated Perl Myths talk. Having comprehensively debunked some myths with hard facts about perl and its ecosystem, I wanted to end with a slide that summarized some truths.</p>
<p>I liked the slide text so much I wanted to share it with you:</p>
<hr />
<p><strong><br />
<blockquote>
Perl:</p>
<p>has a massive library of reusable code<br />
has a culture of best practice and testing<br />
has a happy welcoming growing community<br />
has a great future in Perl 5 and Perl 6<br />
is a great language <em>for getting your job done</em><br />
&nbsp;&nbsp;&nbsp;&nbsp;for the last 20 years, and the next 20!</p></blockquote>
<p></strong></p>
<p>&nbsp;</p>
<hr />
<p>It would make more sense after seeing the talk, but I think it stands well on its own as a summary of Perl.</p>
<p></p>
<br />Posted in perl Tagged: myths, presentation <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/326/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=326&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/09/10/perl-in-five-sentences/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	</item>
		<item>
		<title>Is your Perl community visible?</title>
		<link>http://blog.timbunce.org/2009/09/04/is-your-perl-community-visible/</link>
		<comments>http://blog.timbunce.org/2009/09/04/is-your-perl-community-visible/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 12:44:50 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[graphs]]></category>
		<category><![CDATA[trends]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=316</guid>
		<description><![CDATA[As I mentioned recently, I&#8217;m working on an update to my Perl Myths talk. (Which is really a review of the state of the art, state of the community, resources, and best practices. You could even call it marketing.) In recent months, and especially while researching for this update, it&#8217;s become clear to me that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=316&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>As I mentioned <a href="http://blog.timbunce.org/2009/08/13/help-me-update-my-perl-myths-talk-for-2009/">recently</a>, I&#8217;m working on an update to my Perl Myths talk. (Which is really a review of the state of the art, state of the community, resources, and best practices. You could even call it marketing.)</p>
<p>In recent months, and especially while researching for this update, it&#8217;s become clear to me that the Perl community is both functioning well and growing more conscious of its own role and value.</p>
<p>But are the various components of &#8220;the community&#8221; sufficiently visible?<span id="more-316"></span></p>
<p>You&#8217;ll often hear expressions like CPAN is the &#8220;jewel in the crown&#8221; of Perl. To the extent that&#8217;s true, it&#8217;s the Perl community that we have to thank. CPAN feeds the community, and the community feeds CPAN &#8211; at an <a href="http://stats.cpantesters.org/trends.html">ever increasing rate</a>. <em>(Those graphs currently include the current incomplete month, so often show a sudden but unrepresentative drop in the final value. That&#8217;s being fixed.)</em></p>
<p>When I read stories from those new to the community <a href="http://use.perl.org/~redspike/journal/39576">like this</a>, or <a href="http://thejoysofcomputing.wordpress.com/2009/09/02/why-i-love-perl-already/">this</a>, I think Larry&#8217;s <a href="http://use.perl.org/article.pl?sid=00/07/19/161217">vision</a> expressed in 2000 (and <a href="http://www.oreillynet.com/pub/wlg/5091">echoed</a> in 2004 by Nat) of &#8220;the community&#8217;s rewrite of the community&#8221; has come to pass.</p>
<p>But for every user in the perl community there are countless more perl users outside it. Unaware of other perl users near them, either physically or <a href="http://www.irc.perl.org/">virtually</a>. We need to find ways of reaching out to those users and encouraging them to join our various communities (Perl Mongers, PerlMonks, IRC channels etc. etc.).</p>
<h2>On The Map?</h2>
<p>So, back to my Perl Myths talk&#8230; To help convey the scale and geographic spread of the perl community I&#8217;m including <a href="http://www.pm.org/groups/map.html">this map</a> of the locations of Perl Mongers groups:</p>
<p><img src="http://timbunce.files.wordpress.com/2009/09/zz3d4a76b3.png?w=639&#038;h=426" alt="Global map of perl monger group locations" border="0" width="639" height="426" /></p>
<p>When I zoomed in on Europe I could see that there was no marker for the <a href="http://dublin.pm.org/">Dublin Perl Mongers</a>. Now I know that the Dublin group is <a href="http://mail.pm.org/pipermail/dublin-pm/">barely</a> active, but it is alive and should be on the map. So that got me thinking &#8220;how many more Perl Monger groups are alive but not on the map?&#8221;.</p>
<p>Please go check the map for any perl monger groups <em>you know of</em> and, if you can&#8217;t find them, email the admin for the group (you can find the email address at http://www.pm.org) and ask them to update their details to include the location. Also, if possible, email the approximate location to <a href="http://www.pm.org/contact/index.html">pm.org</a> yourself so they can be added to the map ASAP. (I&#8217;d be especially grateful if more markers could be added for groups in sparse areas of the map!)</p>
<h2>In The Calendar?</h2>
<p>To help convey the scale of <em>activity</em> within the community I include this graph of conferences, workshops, and hackathons (<em>thanks to BooK for updating it for me</em>):</p>
<p><img src="http://act.mongueurs.net/act-conferences.png" alt="graph of perl conferences, workshops, and hackathons by year" border="0" width="639" height="426" /></p>
<p>Notice the dip in &#8220;Other conferences&#8221; in 2009? Perhaps the rise in 2008 was an aberration, and 2009 has returned to the underlying trend. Or perhaps some smaller events, like workshops and hackathons, might have been missed, in the same way that Perl Monger groups might not be &#8216;on the map&#8217;.</p>
<p>So I&#8217;m looking for help in checking that all perl workshops and hackathons in 2009 have been noted.</p>
<p>The underlying data for the graph can be found in a YAML file <a href="http://www.yapceurope.org/events/conferences.yml">here</a>. Or, instead of rummaging though a YAML file, you could look at <a href="http://www.google.com/calendar/embed?src=ngctmrd1cac35061mrjt3hpgng%40group.calendar.google.com">this calendar</a>. I&#8217;ve already checked that all entries matching &#8216;workshop&#8217; or &#8216;hackathon&#8217; are in the YAML file. What I&#8217;d like <em>you</em> to do, is check that any workshops or hackathons that <em>you&#8217;re aware of</em> are in the calendar. If not, let me know.</p>
<p>Thanks!</p>
<br />Posted in life, perl Tagged: community, graphs, trends <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/316/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=316&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/09/04/is-your-perl-community-visible/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2009/09/zz3d4a76b3.png" medium="image">
			<media:title type="html">Global map of perl monger group locations</media:title>
		</media:content>

		<media:content url="http://act.mongueurs.net/act-conferences.png" medium="image">
			<media:title type="html">graph of perl conferences, workshops, and hackathons by year</media:title>
		</media:content>
	</item>
		<item>
		<title>Can you help me generate an alpha channel gradient image?</title>
		<link>http://blog.timbunce.org/2009/08/31/can-you-help-me-generate-an-alpha-channel-gradient-image/</link>
		<comments>http://blog.timbunce.org/2009/08/31/can-you-help-me-generate-an-alpha-channel-gradient-image/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 21:19:48 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[nytprof]]></category>
		<category><![CDATA[image]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=313</guid>
		<description><![CDATA[Here&#8217;s an extract from a treemap generated by the perl Devel::NYTProf profiler: Notice the shading on the boxes? That&#8217;s done by setting the background color of the box to green, and also setting the background image to one that&#8217;s mostly transparent. The image doesn&#8217;t contain any color. It&#8217;s just an &#8216;alpha channel gradient&#8217; &#8212; in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=313&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s an extract from a treemap generated by the perl <a href="http://search.cpan.org/dist/Devel-NYTProf/">Devel::NYTProf</a> profiler:</p>
<p><img src="http://timbunce.files.wordpress.com/2009/08/zz60011314.png?w=200&#038;h=200" alt="ZZ60011314.png" border="0" width="200" height="200" /></p>
<p>Notice the shading on the boxes? <span id="more-313"></span>That&#8217;s done by setting the background color of the box to green, and also setting the background image to one that&#8217;s mostly transparent. The image doesn&#8217;t contain <em>any</em> color. It&#8217;s just an &#8216;alpha channel gradient&#8217; &mdash; in this case a radial gradient that&#8217;s nearly fully transparent at the center and less transparent at the edges. It overlays the color and creates a visually pleasant effect. (I didn&#8217;t come up with this idea, I saw it used in <a href="http://thejit.org/Jit/Examples/Treemap/example3.html">one</a> of the <a href="http://thejit.org/home/">JIT</a> examples.)</p>
<p>Here&#8217;s an example of a transparent alpha channel gradient image (of course, this may not show up well as it&#8217;s mostly transparent :-)</p>
<p><img src="http://timbunce.files.wordpress.com/2009/08/gradient40.png?w=200&#038;h=200" alt="gradient40.png" border="0" width="200" height="200" /></p>
<p>The transparent image gets stretched to fit the box, as you can see above. That works fairly well but ideally I&#8217;d like to get a more &#8216;cushioned&#8217; effect with a &#8216;highlight&#8217;, like the illumination was coming from the top-left direction.</p>
<p>Something more like the boxes in this treemap from <a href="http://www.flickr.com/photos/schoschie/100056488/">schoschie</a>:<br /><img src="http://timbunce.files.wordpress.com/2009/04/82244d56-fa2c-4044-ae46-ee53b63861be.jpg?w=500&#038;h=398" alt="82244D56-FA2C-4044-AE46-EE53B63861BE.jpg" border="0" width="500" height="398" /><br />(Though if you look at that image carefully you&#8217;ll see that the location of the highlight isn&#8217;t consistent. I&#8217;m not sure what logic was used for that, or why.) </p>
<p>So anyway, I want to create a new alpha channel gradient image, but one where the gradient isn&#8217;t simply radial.</p>
<p>I&#8217;ve struggled with this in tools like <a href="http://www.flyingmeat.com/acorn/">Acorn</a> and <a href="http://seashore.sourceforge.net/">Seashore</a> but failed. Mostly, I imagine, because I&#8217;m very unfamiliar with the tools, and especially working with the alpha-channel in non-trivial ways. There seem to be very few resources that cover more than simple examples.</p>
<p>Here&#8217;s an image that contains a monochrome mask that gives a rough idea of what I&#8217;m looking for as an alpha channel image. Here darker represents less transparent:</p>
<p><img src="http://timbunce.files.wordpress.com/2009/08/square-gradient-mask.png?w=200&#038;h=200" alt="square gradient mask.png" border="0" width="200" height="200" /></p>
<p>As you can see, I want the bulk of the central space to be nearly fully-transparent, with a fully-transparent highlight near a top corner. The lower-level of transparency should be limited to a fairly sharp gradient near the edges of the square image. That should work well when stretched to fit the variously sized rectangles in the treemap.</p>
<p>So, can you walk me though generating a non-trivial transparent alpha channel gradient image in a tool like Acorn or Seashore? Or perhaps the simplest approach would be a command-line utility to convert a monochrome gradient like the one above into a pure alpha channel gradient. If there is such a thing, can you talk me though using that?</p>
<p>Of course none of this is <em>essential</em> to NYTProf, and I won&#8217;t hold up the next release for this. This is pure gloss &mdash; but sometimes gloss is important.</p>
<br />Posted in tech Tagged: image, nytprof <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/313/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=313&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/08/31/can-you-help-me-generate-an-alpha-channel-gradient-image/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2009/08/zz60011314.png" medium="image">
			<media:title type="html">ZZ60011314.png</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2009/08/gradient40.png" medium="image">
			<media:title type="html">gradient40.png</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2009/04/82244d56-fa2c-4044-ae46-ee53b63861be.jpg" medium="image">
			<media:title type="html">82244D56-FA2C-4044-AE46-EE53B63861BE.jpg</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2009/08/square-gradient-mask.png" medium="image">
			<media:title type="html">square gradient mask.png</media:title>
		</media:content>
	</item>
		<item>
		<title>Help me update my Perl Myths talk for 2009</title>
		<link>http://blog.timbunce.org/2009/08/13/help-me-update-my-perl-myths-talk-for-2009/</link>
		<comments>http://blog.timbunce.org/2009/08/13/help-me-update-my-perl-myths-talk-for-2009/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 15:21:18 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[ireland]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[myths]]></category>
		<category><![CDATA[perl6]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=306</guid>
		<description><![CDATA[I&#8217;m going to be speaking at the OSS BarCamp in Dublin in September. Given the likely audience I think my Perl Myths talk would be a good fit. It needs updating though, and that&#8217;s where you can help&#8230; It&#8217;s a strongly fact base talk with lots of graphs, numbers, and references. A lot has happened [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=306&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m going to be speaking at the <a href="http://www.ossbarcamp.com">OSS BarCamp</a> in Dublin in September. Given the likely audience I think my <a href="http://blog.timbunce.org/2008/03/08/perl-myths/">Perl Myths talk</a> would be a good fit.</p>
<p>It needs updating though, and that&#8217;s where <em>you can help</em>&#8230;<span id="more-306"></span></p>
<p>It&#8217;s a strongly fact base talk with lots of graphs, numbers, and references. A <em>lot</em> has happened in the Perl community since I wrote the talk over 18 months ago!</p>
<p>Lots of the information needs to be checked and updated. The <a href="http://blog.timbunce.org/2008/02/12/comparative-language-job-trend-graphs/">jobs graphs are easy</a>, as are the basic CPAN numbers.</p>
<p>I&#8217;d like to get updated versions of: the graph of CPAN uploads (slide 23), test counts for perl 5.10.1 (slide 44), the graph of cpan-testers reports (slide 47).</p>
<p>One item that&#8217;s not in the slides, which were written in Feb 2008, but is in <a href="http://blip.tv/file/1150746">the screencast</a> made later at OSCON (at 7:00) is the statement that &#8220;<em>One quarter of all CPAN distributions have been updated in the last 4 months! Half of all in the last 17 months!</em>&#8221; That&#8217;s an impressive and important statistic but it need updating. I think I got that from Schwern&#8217;s excellent &#8220;<a href="http://use.perl.org/~schwern/journal/36705">Perl is unDead</a>&#8221; talk, but I don&#8217;t know how he got the figures or, more importantly, how to update them. (And schwern.org seems down so I can&#8217;t get the <a href="http://schwern.org/~schwern/talks/Perl%20is%20unDead%20-%20YAPC-NA-2008.pdf">slides</a>.)</p>
<p>At OSCON I also talked about myths relating to Perl 6 (again, not in the old slides, but starting at 19:20 in the <a href="http://blip.tv/file/1150746">screencast</a>). I&#8217;d like to cover Perl 6 when I talk in Dublin in September, but the status of Parrot and Perl 6 has changed in the last 18 months even more than Perl 5. So I need help with good sources of hard data for Parrot and Perl 6, similar to what I have in the screencast but updated.</p>
<p>More generally, I&#8217;m also looking for new sources of information &mdash; hard data about the vigourous health of perl and its community. Have you seen any relevant talks/slides or blog posts you can recommend?</p>
<p>Can you help with any of the above?</p>
<p>Thank you in advance!</p>
<br />Posted in ireland, perl Tagged: myths, perl, perl6, presentation <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/306/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=306&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/08/13/help-me-update-my-perl-myths-talk-for-2009/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	</item>
	</channel>
</rss>