<?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, 24 Dec 2009 23:16:13 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<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&#8230;" />
	<atom:link rel='hub' href='http://blog.timbunce.org/?pushpress=hub'/>
		<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:

That&#8217;s a treemap of 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" />]]></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 &#8217;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 &#8217;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>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/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 to [...]<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 for PostgreSQL [...]<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>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>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 coupled our [...]<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>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>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[graphs]]></category>
		<category><![CDATA[jobs]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[myths]]></category>
		<category><![CDATA[ossbarcamp]]></category>
		<category><![CDATA[perl6]]></category>
		<category><![CDATA[presentation]]></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 since 2004! [...]<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 of reusable code
has [...]<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 the [...]<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[image]]></category>
		<category><![CDATA[nytprof]]></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 this [...]<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[myths]]></category>
		<category><![CDATA[perl6]]></category>
		<category><![CDATA[presentation]]></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 in the [...]<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>
		<item>
		<title>NYTProf v3 &#8211; a sneak peak</title>
		<link>http://blog.timbunce.org/2009/08/07/nytprof-v3-a-sneak-peak/</link>
		<comments>http://blog.timbunce.org/2009/08/07/nytprof-v3-a-sneak-peak/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 02:12:49 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[nytprof]]></category>
		<category><![CDATA[oscon]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[slideshare]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=301</guid>
		<description><![CDATA[I&#8217;ve had a great week at OSCON. The talks are excellent but the real value is in the relationships formed and renewed in the &#8220;hallway track&#8221;. I&#8217;m honoured and humbled to be able to call many great people my friends.
My talk on Devel::NYTProf seemed to go well. This year I covered not just NYTProf and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=301&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had a great week at OSCON. The talks are excellent but the real value is in the relationships formed and renewed in the &#8220;hallway track&#8221;. I&#8217;m honoured and humbled to be able to call many great people my friends.</p>
<p>My <a href="http://en.oreilly.com/oscon2009/public/schedule/detail/7941">talk on Devel::NYTProf</a> seemed to go well. This year I covered not just NYTProf and the new features in v3 (not yet released) but also added a section on how to use NYTProf to optimize your perl code.</p>
<p>Here&#8217;s a quick summary, with links to the slides and screen-cast, and outline what&#8217;s still to be done before v3 gets released (getting closer by the day).<span id="more-301"></span>The first two-thirds of the talk covered general profiling topics and an overview of NYTProf v3. This was an updated and compressed version of the talk I gave last year.</p>
<p>The final third covered optimization techniques.</p>
<p>I began with stern warning against optimization unless there&#8217;s a clear need, followed by a selection of quotes, among which is the well known classic from <a href="http://en.wikipedia.org/wiki/Donald_Knuth">Donald Knuth</a>: &#8220;premature optimization is the root of all evil&#8221;. What few people remember is that that&#8217;s just a fragment of a more balanced statement:</p>
<blockquote><p><em>“We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. <strong>Yet we should not pass up our opportunities in that critical 3%.</strong>”</em></p></blockquote>
<p>After getting an implicit nod from Donald I quoted <a href="http://en.wikipedia.org/wiki/Rob_Pike">Rob Pike</a> on the importance of measurement:</p>
<blockquote><p><em>“Bottlenecks occur in surprising places, so don&#8217;t try to second guess and put in a speed hack until you have </em>proven<em> that&#8217;s where the bottleneck is.”</em></p></blockquote>
<p>Then I outlined the sequence of steps I usually take when performance profiling and optimizing code. These were grouped into three phases: &#8220;Low Hanging Fruit&#8221;, &#8220;Deeper Changes&#8221;, and &#8220;Structural Changes&#8221;.</p>
<p>I&#8217;ve generated a <a href="http://assets.en.oreilly.com/1/event/27/State-of-the-art%20Profiling%20with%20Devel__NYTProf%20Presentation.pdf">PDF of the slides</a> and made it <a href="http://www.slideshare.net/Tim.Bunce/develnytprof-200907">available on slideshare.net</a>. I&#8217;ve also uploaded <a href="http://blip.tv/file/2396942">the 45 minute screencast</a> to <a href="http://timbunce.blip.tv/">my blip.tv channel</a>.</p>
<p>Let me know if you find them useful.</p>
<hr />
p.s. This was originally a large post highlighting features of NYTProf v3. I hate talking about vapourware and with every day that passes the code is getting closer to being ready. In the end I decided to split the post in two. The shiny goodness in v3 will get its own blog post when it&#8217;s released. Meanwhile the slides and screencast will give you a sneak peek.</p>
<br />Posted in perl Tagged: conference, nytprof, oscon, presentation, slideshare, video <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/301/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/301/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/301/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/301/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/301/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/301/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/301/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/301/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/301/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/301/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=301&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/08/07/nytprof-v3-a-sneak-peak/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>Customer Relationship Management (CRM) systems in Perl</title>
		<link>http://blog.timbunce.org/2009/07/06/customer-relationship-management-crm-systems-in-perl/</link>
		<comments>http://blog.timbunce.org/2009/07/06/customer-relationship-management-crm-systems-in-perl/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 15:28:17 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[crm]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=286</guid>
		<description><![CDATA[I&#8217;m looking for a CRM system implemented in Perl. As it turns out, so are the Perl Foundation.
So I thought I&#8217;d summarize my interpretation of the comments on that thread, as much for my own benefit as yours, and see if this post flushes out any further information.
We&#8217;ll start with the smaller/personal projects and work [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=286&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m looking for a CRM system implemented in Perl. As it turns out, <a href="http://news.perlfoundation.org/2008/01/i_need_a_crm_package.html">so are the Perl Foundation</a>.</p>
<p>So I thought I&#8217;d summarize my interpretation of the comments on that thread, as much for my own benefit as yours, and see if this post flushes out any further information.</p>
<p>We&#8217;ll start with the smaller/personal projects and work up from there&#8230;<br />
<span id="more-286"></span></p>
<h2>John Cappiello</h2>
<p>John mentioned that he was working on something. I sent John an email to ask for an update and he said it had &#8220;morphed away from a CRM into something not really overlapping much at all&#8221;.</p>
<h2>Gábor Szabó</h2>
<p>Gábor Szabó mentioned in the thred that he has &#8220;a simple CRM I use in-house that I plan to release as open source one day. It is written in Perl. While it is very minimalistic if you are interested I can show it and we can discuss what additional features TPF might need.&#8221;</p>
<h2><a href="http://www.hiivesystems.com">Affinity</a></h2>
<p>Affinity was mentioned in the thread, but I can&#8217;t find any <a href="http://www.google.com/search?q='open+source'+site:hiivesystems.com">references</a> to it being open source.</p>
<h2><a href="http://www.thinx.ch">CustomX</a></h2>
<p>The web pages are in German, so here&#8217;s a <a href="http://translate.google.com/translate_c?hl=en&amp;sl=de&amp;tl=en&amp;u=http://www.thinx.ch/topic7854/story20752.html&amp;rurl=translate.google.com&amp;usg=ALkJrhiQbWFGGcA08iaAz6pwcweciFno_g">translation to English</a> of their web site, which gets visually mangled in the process, and a much more readable translation of their 2006 <a href="http://translate.google.com/translate?hl=en&amp;sl=de&amp;tl=en&amp;u=http://download.contentx.ch/1/crm_whitepaper.pdf&amp;rurl=translate.google.com">whitepaper</a>.</p>
<p>It&#8217;s available under the Perl Artistic License. The base language is German. I don&#8217;t know what level of internationalization/locaization they support.</p>
<p>They currently use mod_perl v1 and say it&#8217;s &#8220;not tested&#8221; for v2, which seems to suggest a lack of maintenance. Databases supported include Postgres, Oracle, MySQL, and Informix. It&#8217;s extensible via plugins.</p>
<p>I couldn&#8217;t find any indication of a development community.</p>
<h2><a href="http://wice.de/produkt.html">Wice CRM Groupware</a></h2>
<p>Another German CRM system, so here&#8217;s a <a href="http://translate.google.com/translate?hl=en&amp;sl=de&amp;u=http://www.wice.de/">translation</a> of their home page. It&#8217;s in use by <a href="http://translate.google.com/translate?hl=en&amp;sl=de&amp;u=http://www.wice.de/partner.html">a range of companies</a>, and they even have a <a href="http://www.wice.de/20051114_Magazin_mit_Award.pdf">glossy magazine</a> (though it looks like a once-off produced in 2005).</p>
<p>&#8220;Wice is a LAMP system with Linux as operating system, Apache as web and application server, MySQL as the database and the system is developed as an Apache module in mode_perl.&#8221;</p>
<p>&#8220;We have Wice a plugin architecture, which we almost arbitrary adjustments, enhancements and interfaces can be realized [...] There are also numerous standard plugins, such as a web, an integrated CMS, or a Customer Self Service Center.&#8221;</p>
<p>The source code is not &#8216;free&#8217;, however. You get the source code only <a href="http://translate.google.com/translate?hl=en&amp;sl=de&amp;u=http://crm.blogg.de/eintrag.php%3Fid%3D245">when you licence the software</a>.</p>
<h2><a href="http://donor.com/">Donor.com</a></h2>
<p>&#8220;Our software has been serving non-profits for 30+ years. We have spent the past 5 years wrapping all of our C-based business logic with Perl to expose everything as Web Services (50 modules and 300+ methods so far). Our presentation layers are the WebGUI CMS (also Perl) and a cross-client GUI (Win/OSX/Linux) written in wxPerl. Our systems integrate everything from CRM, inventory management, event tracking, credit card processing, bulk email, direct mail, magazine subscriptions, sponsorships, etc. Almost everything in our system is configurable. We have not yet open-sourced all of our code, but we did just transition our ownership to a new 501(c)3, the DonorWare Foundation, to help facilitate that in the future.&#8221;</p>
<p>Jim Brandt replied to comment in the thread saying &#8220;I got another response from the folks who run donor.com. Turns out they are heavy perl users, so we&#8217;re looking at their system right now to see if it will meet our needs. I&#8217;ll post with more details once we know.&#8221; No news yet.</p>
<p>Josh Berkus expressed some <a href="http://lists.flossfoundations.org/pipermail/foundations-software/Week-of-Mon-20080929/thread.html#22">pros and cons</a> of using donor.com.</p>
<h2>Other Perl CRM Systems?</h2>
<p>What have I missed? Are there any other open source CRM systems out there implemented in Perl?</p>
<hr />
<p>For comparison, here are some details (mostly skimmed from Wikipedia) of open source CRM systems not implemented in perl&#8230;</p>
<h2><a href="http://en.wikipedia.org/wiki/CiviCRM">CiviCRM</a></h2>
<p>Designed to meet the needs of advocacy, non-profit and non-governmental groups. Implemented in PHP. The license for the current version is the GNU AGPL 3.</p>
<p>CiviCRM may be deployed either standalone or alongside Drupal and Joomla! content management systems. Both the Drupal and Joomla! professional associations use CiviCRM. The standalone version is intended to work alongside other CMSs.</p>
<p>CiviCRM is used by many large NGOs including Amnesty International, Creative Commons and the Wikimedia Foundation for their fundraising.</p>
<p>They&#8217;re currently considering a <a href="http://civicrm.org/node/589">new architecture</a>:</p>
<blockquote><p><em>In short, we propose using PHP Doctrine for the ORM layer [...] we propose using thin controllers which speak XML and JSON. All UI is subsequently pushed directly to HTML, JS and jQuery. The controllers and the UI are connected through authenticating RESTful interface.</em></p></blockquote>
<p>Link to the <a href="https://www.ohloh.net/p/civicrm"> CiviCRM project page</a> at Ohloh.net.</p>
<h2><a href="http://en.wikipedia.org/wiki/Vtiger_CRM">vtiger CRM</a></h2>
<p>An open source fork of SugerCRM. Implemented in PHP, initially released in 2003. Seems to be supported by AdventNet, who make a non-open source Java based CRM called Zoho. Licences: vtiger Public License 1.1 and SugarCRM Public License 1.1.2.</p>
<p>Hosted at <a href="http://sourceforge.net/projects/vtigercrm/">sourceforge</a>. Link to <a href="https://www.ohloh.net/p/civicrm"> vtiger project page</a> at Ohloh.net.</p>
<h2><a href="http://www.epesibim.com/">epesi BIM</a></h2>
<p>Implemented in PHP. Links to the developers <a href="http://www.epesi.org/index.php?title=Main_Page">wiki</a>, <a href="http://forum.epesibim.com/">forums</a>, and Ohloh.net <a href="https://www.ohloh.net/p/12690">project page</a>.</p>
<hr />
<p>A search on Ohloh.net for <a href="https://www.ohloh.net/p?q=tag%3Acrm">tag:crm</a> yields 649 projects with the CRM tag!</p>
<p>It turns out that Ohloh is a great way to look for projects. The Analysis Summary on each project page gives a useful overview of some key metrics: &#8220;Large, active development team&#8221;, &#8220;Few source code comments&#8221; etc.</p>
<p>Sorting the list in various ways and taking the projects (other than those above) that appear on the first page of each, gives this list, in no particular order:</p>
<h2><a href="https://www.ohloh.net/p/openerp">OpenERP</a></h2>
<p>&#8220;Python. Formerly known as TinyERP. OpenERP is an Open Source enterprise management software.	It covers and integrates most enterprise needs and processes: accounting, hr, sales, crm, purchase, stock, production, services management, project management, marketing campaign, management by affairs, &#8230; </p>
<p>Once in production, it automates and help you to control all activities: sales triggers manufacturing orders, accounting entries are updated by stock operations, incoming mails are tracked in the system, the integrated document management system helps your team to collaborate, &#8230;&#8221;</p>
<h2><a href="https://www.ohloh.net/p/162">Open For Business Project (Apache OFBiz)</a></h2>
<p>Java. &#8220;The Open For Business Project is a set of tools and enterprise applications including ERP, CRM, e-commerce, SCM, MRP, and CMMS/EAM. It uses a service oriented and events driven architecture and tools to automate all aspects of application development and maintenance.&#8221;</p>
<h2><a href="https://www.ohloh.net/p/omnierp">Omni ERP</a></h2>
<p>Python. &#8220;Omni ERP is an innovative business application platform; it is completely based in open source technologies and brings a whole new level of modularity and flexibility to the business solutions environment.<br />
It uses a new approach combining new software engineering techniques like plugin based architecture, inversion of control and aspect oriented programming with a refreshing new RIA UI to bring a new level of experience to the SME market&#8221;</p>
<h2><a href="https://www.ohloh.net/p/adempiere">ADempiere</a></h2>
<p>Java. &#8220;ADempiere Business Suite ERP/CRM/MFG/SCM/POS done the Bazaar way in an open and unabated fashion. Focus is on the Community that includes Subject Matter Specialists, Implementors and End-Users. We are a community fork of Compiere&#8221;</p>
<h2><a href="https://www.ohloh.net/p/erp5">ERP5</a></h2>
<p>Python. &#8220;ERP5 is a full featured high end Open Source / Libre Software solution published under GPL license and used for mission critial ERP / CRM / MRP / SCM / PDM applications by industrial organisations and government agencies.</p>
<p>It is distributed to linux community via packages for numerous distributions (Mandriva, Debian, Ubuntu,&#8230;) and a dedicated Live CD.&#8221;</p>
<h2><a href="https://www.ohloh.net/p/jfire">JFire</a></h2>
<p>Java. &#8220;JFire is an ERP, CRM, eBusiness, and SCM/SRM solution for business enterprises. It uses JavaEE, JDO, and Eclipse RCP, and is designed to be highly customizable. It is a complete and extensible solution that fulfills business needs like user management, online trade with business partners, points of sale, various distribution channels forming a distribution network, store management, etc.&#8221;</p>
<h2><a href="https://www.ohloh.net/p/5550">CK-ERP</a></h2>
<p>PHP. &#8220;CK-ERP is an open source accounting / MRP / ERP / CRM system that runs on top of multiple middlewares. It provides accounting and back office functionalities to SMEs and utilizes the underlying middleware to administer accounts/groups.</p>
<p>It comprises 22 modules &#8211; Administration, Multilingual Facility, Contact Management, Customer Relationship, Customer Self Service, Vendor Relationship, Material Requirement Planning, Warehouse, Inventory, Service, Accounting Ledger, Bank Reconciliation, Accounts Payable, Accounts Receivable, Purchase Order, Sales Order, Quotation, POS for Cashier, POS for Manager, Human Resources, Staff Self Service and Payroll.</p>
<p>Operating platform can either be LAMP or LAPP. Backend database engine can be anyone of MySQL, PostgreSQL and SQLite&#8221;. Oddly, their home page says &#8220;minimal documentation will be made available to users of CK-ERP&#8221; and their <a href="http://ck-erp.net/xoops/htdocs/modules/content/index.php?id=7">roadmap</a> is old.</p>
<h2><a href="https://www.ohloh.net/p/5061">Blue ERP</a></h2>
<p>PHP. &#8220;Blue ERP is an open source, web based ERP application. Its goal is to provide a flexible and user friendly interface that can work out of the box and be modified to suit specific needs easily.</p>
<p>The main goals of the projects are:* provide a feature full ERP application<br />
* be open in licence and in spirit &#8211; in blue ERP everything is open, especially the development<br />
* be user friendly by providing adequate documentation and assistance to users to encourage widespread adoption&#8221;</p>
<h2><a href="https://www.ohloh.net/p/5613">OTRS::ITSM</a></h2>
<p>After all the PHP systems, it&#8217;s nice to find one implemented in Perl! Though the description suggests it&#8217;s geared towards the needs of an IT Service organization.</p>
<p>&#8220;ITIL compliant Open Source IT Service Management Solution (ITSM). Requires the OTRS (Open Ticket Request System) framework.</p>
<p>Besides all OTRS features, new ones include Incident, Problem and Configuration Management, integrated Configuration Management Data Base; process spanning Communication management: within the IT Service organization, towards Customers/Users/Management and Suppliers/Providers; powerfull statistical features for (Trend-)Analysis, key figured Reporting, ITSM-Planning/-Controlling; flexible configuration, customizing and expandability regarding your individual requirements.&#8221;</p>
<hr />
<p>[That's quite enough "CRM" systems! Ed.]</p>
<br />Posted in software Tagged: crm, open source, perl, php <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/286/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=286&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/07/06/customer-relationship-management-crm-systems-in-perl/feed/</wfw:commentRss>
		<slash:comments>21</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>Unattributed copying of perl blog content via Planet Perl</title>
		<link>http://blog.timbunce.org/2009/06/15/unattributed-copying-of-perl-blog-content-via-planet-perl/</link>
		<comments>http://blog.timbunce.org/2009/06/15/unattributed-copying-of-perl-blog-content-via-planet-perl/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 09:22:38 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[license]]></category>
		<category><![CDATA[perl blogs]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=282</guid>
		<description><![CDATA[I recall other bloggers complaining of unattributed redistribution of their work. Now a site called rapid-dev.net has started redistributing Plant Perl posts, including mine, with an advert at the top.
I wouldn&#8217;t mind if the page had clear attribution, but it doesn&#8217;t. In fact, at the bottom it says &#8220;Author: hoanatwho&#8221;.
That doesn&#8217;t feel right. Especially as [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=282&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I recall other bloggers complaining of unattributed redistribution of their work. Now a site called rapid-dev.net has started redistributing Plant Perl posts, including mine, with an advert at the top.</p>
<p>I wouldn&#8217;t mind if the page had clear attribution, but it doesn&#8217;t. In fact, at the bottom it says &#8220;Author: hoanatwho&#8221;.</p>
<p>That doesn&#8217;t feel right. Especially as many of my posts, and probably many others from Planet Perl, use the first-person pronoun &#8220;I&#8221;.</p>
<p>Why does this matter? A couple of months ago Merlin Mann wrote a long but <a href="http://www.43folders.com/2009/04/10/free-me">excellent piece</a> that explains why <em>far</em> better than I could.</p>
<blockquote><p><em>Nobody but me is allowed to decide why I make things. And — if and when I choose to give away the things that I make — nobody but me is allowed to define how or where I’ll do it. I am independent.</em></p></blockquote>
<p>Merlin discusses, with his typical style, the motivations of those who make their work available for free, and the perils of presuming to understand their motives. Although written mostly about bloggers it seems very applicable to authors of Open Source software. For me it echoes how I feel about coding and, to an extent, the freedom that Perl give me to express my thoughts.</p>
<p>If you have a blog I recommend you at least make the licence for reuse clear. <a href="http://blog.timbunce.org">My blog</a> has a &#8220;Terms of Use&#8221; link in the sidebar that refers to <a href="http://creativecommons.org/">Creative Commons</a> &#8220;Attribution-Noncommercial-Share Alike 3.0&#8243; <a href="http://creativecommons.org/licenses/by-nc-sa/3.0/">license</a>.</p>
<p>Looking at the <a href="http://planet.perl.org/">Planet Perl page</a> I see it has no licence. Perhaps that should be fixed &mdash; even if only to say that the license of the feeds being aggregated must be respected.</p>
<br />Posted in life, perl, tech Tagged: license, perl blogs <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/282/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/282/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/282/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/282/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/282/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=282&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/06/15/unattributed-copying-of-perl-blog-content-via-planet-perl/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>
	</item>
		<item>
		<title>Has NYTProf helped you? Tell me how&#8230;</title>
		<link>http://blog.timbunce.org/2009/06/05/has-nytprof-helped-you-tell-me-how/</link>
		<comments>http://blog.timbunce.org/2009/06/05/has-nytprof-helped-you-tell-me-how/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 21:24:06 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[nytprof]]></category>
		<category><![CDATA[oscon]]></category>
		<category><![CDATA[oscon2009]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=278</guid>
		<description><![CDATA[At OSCON this year1 I&#8217;m giving a &#8220;State-of-the-art Profiling with Devel::NYTProf&#8221; talk. It&#8217;ll be an update of the one I gave last year, including coverage of new features added since then (including, hopefully, two significant new features that are in development).
This year I&#8217;d like to spend some time talking about how interpret the raw information [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=278&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>At OSCON this year<sup><a href="#1">1</a></sup> I&#8217;m giving a &#8220;State-of-the-art Profiling with Devel::NYTProf&#8221; <a href="http://en.oreilly.com/oscon2009/public/schedule/detail/7941">talk</a>. It&#8217;ll be an update of the one I gave last year, including coverage of new features added since then (including, hopefully, two significant new features that are in development).</p>
<p>This year I&#8217;d like to spend some time talking about how interpret the raw information and using it to guide code changes. Approaches like common sub-expression elimination and moving invariant code out of loops are straight-forward. They&#8217;re &#8216;low hanging fruit&#8217; with no API changes involved. Good for a first-pass through the code.</p>
<p>Moving loops down into lower-level code is an example of a deeper change I&#8217;ve found useful. There are many more. I&#8217;d like to collect them to add to the talk and the NYTProf documentation.</p>
<p>So here&#8217;s a question for you: after looking at the NYTProf report, how did <em>you</em> identify what you needed to do to <em>fix</em> the problems?</p>
<p>I&#8217;m interested in your experiences. How you used NYTProf, how you interpreted the raw information NYTProf presented, and then, critically, how you decided what code changes to make to improve performance. What worked, what didn&#8217;t. The practice, not the theory. </p>
<p>Could you to take a moment to think back over the times you&#8217;ve used NYTProf, the testing strategy you&#8217;ve used, and the code changes you&#8217;ve made as a result? Ideally go back and review the diffs and commit comments.</p>
<p>Then send me an email &#8212; <em>tell me your story</em>!</p>
<p>The more detail the better! Ideally with actual code (or pseudo-code) snippets<sup><a href="#2">2</a></sup>.</p>
<hr />
<ol>
<li><a name="1"></a>OSCON is in San Jose this year, July 20-24th. You can use the code &#8216;os09fos&#8217; to get a 20% discount.
</li>
<li><a name="2"></a>Annotated diff&#8217;s would be greatly appreciated. I&#8217;ll give credit for any examples used, naturally, and I&#8217;ll happily anonymize any code snippets that aren&#8217;t open source.
</li>
</ol>
<br />Posted in perl Tagged: nytprof, oscon, oscon2009, perl <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/278/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=278&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/06/05/has-nytprof-helped-you-tell-me-how/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>Fixing the POD synopsis in OSX &#8211; take 2 (perldoc, nroff and UTF-8)</title>
		<link>http://blog.timbunce.org/2009/05/19/fixing-the-pod-synopsis-in-osx-take-2-perldoc-nroff-and-utf-8/</link>
		<comments>http://blog.timbunce.org/2009/05/19/fixing-the-pod-synopsis-in-osx-take-2-perldoc-nroff-and-utf-8/#comments</comments>
		<pubDate>Tue, 19 May 2009 22:52:57 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[unicode]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=273</guid>
		<description><![CDATA[Ever copied and pasted a chunk from perldoc output and found you were getting mysterious errors from perl? I have.
I&#8217;ve learnt to rewrite the &#8216;-&#8217; characters because although they look like &#8216;-&#8217; characters they&#8217;re really a unicode HYPHEN: U+2010. Some other chars get mangled too, but that&#8217;s the most frequent problem for me.
So I was [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=273&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Ever copied and pasted a chunk from perldoc output and found you were getting mysterious errors from perl? I have.</p>
<p>I&#8217;ve learnt to rewrite the &#8216;-&#8217; characters because although they look like &#8216;-&#8217; characters they&#8217;re really a unicode HYPHEN: U+2010. Some other chars get mangled too, but that&#8217;s the most frequent problem for me.</p>
<p>So I was delighted to see a blog post by marcus ramberg called <a href="http://marcus.nordaaker.com/2009/05/fixing-the-pod-synopsis-in-osx/">Fixing the POD synopsis in OSX</a> wherein he fingers nroff as being the problem and gives a simple solution:</p>
<blockquote><p><code>alias perldoc='perldoc -t'</code></p></blockquote>
<p>Trouble is using perldoc -t means you loose the nice bold text that nroff gives you. So I went digging&#8230;</p>
<p>It seems the problem only affects people using UTF-8 and that nroff has a -T option that lets you specify an output encoding to use. So if perldoc ran &#8216;nroff -Tascii&#8217; instead of plain &#8216;nroff&#8217; that would avoid the hypen problem and let us keep the bold text.</p>
<p>It turns out that perldoc has an option to specify the nroff command to use, so the solution is simple:</p>
<blockquote><p><code>alias perldoc="perldoc -n 'nroff -Tascii'"</code></p></blockquote>
<p>This is, of course, still a hack. My main worry is that pod docs using non-ascii characters may get mangled. A much better fix would be to arrange for the ascii characters to not get mapped to unicode at all. So I went digging again&#8230;</p>
<p>nroff calls <code>groff -m tty-char ...</code> and tty-char refers to a tty-char.tmac file that defines the character mappings. The groff man pages point me to groff_tmac man pages which tell me I can get groff to look for .tmac files elsewhere by passing a -Mdir option or setting the GROFF_TMAC_PATH environment variable.</p>
<p>I looked at the default file, /usr/share/groff/1.19.2/tmac/tty-char.tmac on my Mac, and&#8230; decided it was time to go to sleep! The formatting is probably simple enough but I&#8217;m out of tuits.</p>
<p>So, what&#8217;s needed is for someone to determine what change is needed to the tty-char.tmac file, or the files it refers to, to avoid unwanted conversions to unicode. Then put a modified file into a directory and either add a -Mdir option to the nroff alias above, or set the GROFF_TMAC_PATH environment variable. Setting the env var has the benefit of &#8216;fixing&#8217; all the man pages.</p>
<p>So, anyone want to dig deeper? (For all I know the solution can already be found on google&#8230;)</p>
<br />Posted in software Tagged: unicode <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/273/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/273/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/273/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/273/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/273/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=273&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/05/19/fixing-the-pod-synopsis-in-osx-take-2-perldoc-nroff-and-utf-8/feed/</wfw:commentRss>
		<slash:comments>7</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>TIOBE Index is being gamed</title>
		<link>http://blog.timbunce.org/2009/05/17/tiobe-index-is-being-gamed/</link>
		<comments>http://blog.timbunce.org/2009/05/17/tiobe-index-is-being-gamed/#comments</comments>
		<pubDate>Sun, 17 May 2009 23:35:19 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[language]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=270</guid>
		<description><![CDATA[It is sad, but inevitable, that the TIOBE index of programming language &#8220;popularity&#8221; (sic) would be gamed.
Once you start measuring something, and advertising the results, people with an interest in particular outcomes naturally start to look for ways to influence those results. (It&#8217;s the Observer Effect writ large.)
The fact that TIOBE&#8217;s methodology, which I&#8217;ve discussed [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=270&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>It is sad, but inevitable, that the <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">TIOBE index</a> of programming language &#8220;popularity&#8221; (sic) would be gamed.</p>
<p>Once you start measuring something, and advertising the results, people with an interest in particular outcomes naturally start to look for ways to influence those results. (It&#8217;s the <a href="http://en.wikipedia.org/wiki/Observer_effect_(physics)">Observer Effect</a> writ large.)</p>
<p>The fact that TIOBE&#8217;s methodology, which I&#8217;ve discussed previously <a href="http://blog.timbunce.org/2008/04/12/tiobe-or-not-tiobe-lies-damned-lies-and-statistics/">here</a> and <a href="http://blog.timbunce.org/2008/04/20/tiobe-or-not-tiobe-an-update/">here</a>, is simplistic makes it particularly open to gaming. Anyone, or any community, with access to many web pages can simply add the magic phrase &#8220;<em>foo</em> programming&#8221;, where <em>foo</em> is their language of choice, to get counted.</p>
<p>And it seems that&#8217;s exactly what the Delphi community did at the end of 2008<sup><a href="#1">1</a></sup>. They <a href="http://www.delphi.org/2008/10/the-many-faces-of-delphi/">made</a> a <a href="http://www.delphi.org/2008/10/delphi-keeps-climbing/">concerted</a> <a href="http://www.delphi.org/2008/10/delphi-language-of-the-year-2008/">effort</a> and it seems to have paid off. (I&#8217;d be very interested in hearing about similar behaviour in other language communities.)</p>
<p>Is that behaviour gaming? The author of the post who exhorted is readers to &#8220;<em>Update your Delphi related blog or site to say Delphi programming on every page in visible text (update the template). Stand up and be counted. You can make a difference!</em>&#8221; doesn&#8217;t seem to think so, as he also said &#8220;<em>I am not suggesting we game the system, just that we help TCPI get an accurate count.</em>&#8220;</p>
<p>An accurate count of <em>what</em>, exactly? That&#8217;s always been the fundamental question with TIOBE. It should be obvious that most web pages that talk about &#8220;delphi programming&#8221; wouldn&#8217;t actually contain the phrase &#8220;delphi programming&#8221;. The same applies to every other language. That&#8217;s the paradox at the heart of the TIOBE Index. And yet, somehow, TIOBE seem to think that counting pages containing the phrase &#8220;delphi programming&#8221; lets them claim that:</p>
<blockquote><p><em>The ratings are based on the number of skilled engineers world-wide, courses and third party vendors.</em></p></blockquote>
<p>Eh? How can they possibly defend that claim? Certainly their documented <a href="http://www.tiobe.com/content/paperinfo/tpci/tpci_definition.htm">definition</a> doesn&#8217;t support it, or even mention it.</p>
<p>I presume they&#8217;re thinking that CV&#8217;s, job postings, and adverts are most likely to contain the magic phrase. It should be obvious, again, that the number of CV&#8217;s, job postings, and adverts referring to a given programming language would naturally only be a small fraction of the total web pages referring to the language. (And only distantly related to the &#8220;popularity&#8221; of a language.) Yet that &#8220;small fraction&#8221; is what TIOBE measure and make bold claims about.</p>
<p>The fact that TIOBE is making a comparison based on a small fraction makes it even more troubling that TIOBE CEO Paul Jansen appears to support language communities changing their pages to include the magic &#8220;<em>foo</em> programming&#8221; phrase. In an email quoted on <a href="http://www.delphi.org/2008/10/delphi-language-of-the-year-2008/">delphi.org</a> he says:</p>
<blockquote><p> For your information, I think your action has already some effect. Tonight’s run shows that Delphi is #8 at this moment. There is a realistic chance that Delphi will become “TIOBE’s Language of the Year 2008″</p></blockquote>
<p>He&#8217;s endorsing the <em>artificial insertion</em> of the magic phrase. Clearly this distorts the TIOBE index in favour of language communities that infect as many pages as possible with the magic phrase.</p>
<p>That sure seems like an invitation to game the system! It&#8217;s likely to lead to other language communities doing the same, and so to further devaluation of the TIOBE Index.</p>
<p>(For alternatives to TIOBE you could look at sites like <a href="http://www.langpop.com/">http://www.langpop.com/</a>, James Robson&#8217;s <a href="http://lui.arbingersys.com/index.html">Language Usage Indicators</a>, or my popular <a href="http://blog.timbunce.org/2008/02/12/comparative-language-job-trend-graphs/">comparison of job trends</a> blog post with &#8216;live&#8217; graphs.)</p>
<p>I have, on a couple of <a href="http://blog.timbunce.org/2008/04/28/this-is-a-perl-blog-too-at-least-partly/">occasions</a>, used the phrase &#8220;perl programming&#8221; in blog posts for my own amusement, and linked it to my original <a href="http://blog.timbunce.org/2008/04/12/tiobe-or-not-tiobe-lies-damned-lies-and-statistics/">TIOBE or not TIOBE – “Lies, damned lies, and statistics”</a> post. I haven&#8217;t suggested that others do the same. TIOBE&#8217;s endorsement of artificial insertion changes that. Now it seems like we&#8217;re going to get a dumb &#8220;race to the bottom&#8221; to see which language community controls the most web pages.</p>
<p>If, as a result, the TIOBE Index is affected significantly, then I simply hope they&#8217;ll drop their pretentious claims and state clearly exactly what they&#8217;re counting, how they&#8217;re doing it, and what it <em>means</em>: not much.</p>
<hr />
<p><a name="1">1.</a> Many thanks to <a href="http://transfixedbutnotdead.com/">Barry Walsh</a> for his <a href="http://transfixedbutnotdead.com/2009/05/17/perl-blogs/">blog post</a> that alerted me to this.</p>
<br />Posted in software Tagged: language <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/270/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=270&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/05/17/tiobe-index-is-being-gamed/feed/</wfw:commentRss>
		<slash:comments>17</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>Thanks, Iron Man, for the good excuse to perl blog</title>
		<link>http://blog.timbunce.org/2009/05/10/thanks-iron-man-for-the-good-excuse-to-perl-blog/</link>
		<comments>http://blog.timbunce.org/2009/05/10/thanks-iron-man-for-the-good-excuse-to-perl-blog/#comments</comments>
		<pubDate>Sun, 10 May 2009 22:23:25 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[perl blogs]]></category>
		<category><![CDATA[perl programming]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=268</guid>
		<description><![CDATA[I&#8217;ve been thinking that I haven&#8217;t blogged much lately. Assorted half-baked ideas would cross my mind and then evaporate before I&#8217;d find the time, or motivation, to actually start writing.
The folks at the Enlightened Perl Organisation have solved the motivation problem by announcing the Iron Man Blogging Challenge: in short, &#8220;maintain a rolling frequency of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=268&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been thinking that I haven&#8217;t blogged much lately. Assorted half-baked ideas would cross my mind and then evaporate before I&#8217;d find the time, or motivation, to actually start writing.</p>
<p>The folks at the <a href="http://www.enlightenedperl.org">Enlightened Perl Organisation</a> have solved the motivation problem by announcing the <a href="http://www.enlightenedperl.org/ironman.html">Iron Man Blogging Challenge</a>: in short, &#8220;<em>maintain a rolling frequency of 4 posts every 32 days, with no more than 10 days between posts</em>&#8220;.</p>
<p>So about one post a week. I can aim for that!</p>
<p>Can you? &#8220;<em>The rules are very simple: you blog, about Perl. Any aspect of Perl you like. Long, short, funny, serious, advanced, basic: it doesn&#8217;t matter. It doesn&#8217;t have to be in English, either, if that&#8217;s not your native language.</em>&#8221; Why not try? Help yourself and help perl at the same time.</p>
<p>I&#8217;ll try to capture the half-baked ideas for perl blog posts as they cross my mind, then build on them as time and mood allow. Hopefully about one a week will mature into an actual blog post.</p>
<p>Meanwhile&#8230;</p>
<p>I remembered that almost exactly a year ago schwern <a href="http://use.perl.org/~schwern/journal/36263">blogged</a> that he was &#8220;<em>horrified at the junk which shows up when you search for perl blog on Google</em>&#8220;. It seems the situation hasn&#8217;t improved much since. The <a href="http://planet.perl.org">planet.perl.org</a> site is top, but the rest are a bit of a mishmash.</p>
<p>The problem is partly that &#8220;<a href="http://www.google.com/search?q=perl+blog">perl blog</a>&#8221; isn&#8217;t a great search term. Google naturally gives preference to words that appear in urls and titles (all else being equal), but blogs rarely explicitly call themselves blogs on their pages or urls. I suspect many on the first page of results are there because &#8216;blog&#8217; appears in the url.  (To help out I&#8217;ve included &#8220;perl blog&#8221; in the title of this post :)</p>
<p>Searching for &#8220;<a href="http://www.google.com/search?q=perl+blogs">perl blogs</a>&#8221; (plural) works better because it finds pages talking <em>about</em> perl blogs, which is useful when searching <em>for</em> perl blogs.</p>
<p>One entry in the &#8220;perl blogs&#8221; results was the Perl Foundation&#8217;s <a href="http://www.perlfoundation.org/perl5/index.cgi?blogs">wiki page listing perl blogs</a>. That was new to me. This blog wasn&#8217;t on it so I&#8217;ve added it. Got a perl blog, or know someone who has, that&#8217;s not listed on that page? Go and add it, now! It&#8217;ll only take a moment.</p>
<p>Along similar lines, I&#8217;ve added the phrases &#8220;perl blog&#8221; and &#8220;perl programming&#8221; to the sidebar of my blog pages. The first is to help people searching for &#8220;perl blog&#8221;. The second is mostly for <a href="http://blog.timbunce.org/2008/04/12/tiobe-or-not-tiobe-lies-damned-lies-and-statistics/">my own amusement</a>.</p>
<br />Posted in perl Tagged: blog, perl blogs, perl programming <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/268/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=268&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/05/10/thanks-iron-man-for-the-good-excuse-to-perl-blog/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>
	</item>
		<item>
		<title>iPhoto &#8211; Removing redundant originals</title>
		<link>http://blog.timbunce.org/2009/04/27/iphoto-removing-redundant-originals/</link>
		<comments>http://blog.timbunce.org/2009/04/27/iphoto-removing-redundant-originals/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 11:26:17 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[iphoto]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=263</guid>
		<description><![CDATA[I recently came across this article on slimming down an iPhoto library by removing the &#8216;Original&#8217; photo where a &#8216;Modified&#8217; one existed.
(That&#8217;s one part of what the free iPhoto Diet app does, but it seems that&#8217;s not being maintained and doesn&#8217;t support recent versions of iPhoto.)
Inspired by the basic three-line shell script in the article [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=263&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I recently came across <a href="http://infinite-sushi.com/2007/02/slimming-down-iphoto/">this article</a> on slimming down an iPhoto library by removing the &#8216;Original&#8217; photo where a &#8216;Modified&#8217; one existed.</p>
<p>(That&#8217;s one part of what the free <a href="http://www.macupdate.com/info.php/id/11668">iPhoto Diet</a> app does, but it seems that&#8217;s not being maintained and doesn&#8217;t support recent versions of iPhoto.)</p>
<p>Inspired by the basic three-line shell script in the article I worked up this somewhat more advanced version:</p>
<pre>#!/bin/sh -ex
cd ~/Pictures/
du -sh 'iPhoto Library'
dest=$HOME/Pictures/iPhoto-Redundant-Originals-`date "+%Y-%m-%d-%H%M"`
# for all files in iPhoto Library/Modified/...,
# move the corresponding iPhoto Library/Originals/...
# files into a zip archive file
find 'iPhoto Library/Modified' -type f -print \
    | perl -pe 's{iPhoto Library/Modified/}{iPhoto Library/Originals/}' \
    | zip -9 -T -m $dest -@ 2&gt;&amp;1 \
    | grep -v 'zip warning: name not matched'
du -sh 'iPhoto Library'
</pre>
<p>It has some advantages over the original: the photos are moved into a unique zip file, rather than the trash, and the file hierarchy is preserved, so files can be restored easily.</p>
<p>It could be modified to only operate on a subset of files, such as those older than a certain age.</p>
<p>Extra notes:</p>
<ol>
<li>After running this you&#8217;ll find that the photo will appear black in the &#8216;edit view&#8217;. That&#8217;s not a problem. The &#8216;edit view&#8217; (which you enter by double clicking on a photo, for example) reconstructs the final image by taking the original and reapplying the edits-so-far. Since the original file has been removed you&#8217;ll just see a black image. Don&#8217;t worry. In all the other views, and for printing etc., your final modified picture will appear perfectly.
</li>
<li>iPhoto handles automatic rotation of images from cameras that record their orientation by performing a rotation &#8216;edit&#8217; for you when you import the image. That rotation creates a modified copy, and <em>that&#8217;s</em> a common cause of bloat in your iPhoto library. It&#8217;s also why you may be surprised to see some originals being archived even though <em>you</em> haven&#8217;t editied them. It would be nice if iPhoto had an option to handle rotations destructively.
</li>
</ol>
<p>Usual <strong>caveats</strong>: this worked for me, your mileage may vary, cross your fingers, read the referenced article (and follow the links in contains), read the comments on them, quit iPhoto, <em>take a backup</em>, wear a tinfoil hat.</p>
<br />Posted in tech Tagged: iphoto <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/263/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=263&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/04/27/iphoto-removing-redundant-originals/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>Examples of Modern Perl</title>
		<link>http://blog.timbunce.org/2009/04/27/examples-of-modern-perl/</link>
		<comments>http://blog.timbunce.org/2009/04/27/examples-of-modern-perl/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 11:01:26 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[modern perl]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=261</guid>
		<description><![CDATA[In the spirit of re-tweeting, this is a short post to highlight some great examples of &#8220;modern perl&#8221;. (I&#8217;m using the term modern perl very loosely, not referring specifically to any one book, website, or module or organization.)
Firstly I&#8217;d like to highlight a couple of recent posts by Jonathan Rockway:
* Unshortening URLs with Modern Perl. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=261&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>In the spirit of re-tweeting, this is a short post to highlight some great examples of &#8220;modern perl&#8221;. (I&#8217;m using the term modern perl very loosely, not referring specifically to any <a href="http://translate.google.com/translate?u=http%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F4798119172&amp;sl=ja&amp;tl=en&amp;hl=en&amp;ie=UTF-8">one</a> <a href="http://www.amazon.com/Modern-Perl-Programming-Michael-Saltzman/dp/0130089656">book</a>, <a href="http://www.modernperlbooks.com">website</a>, or <a href="http://search.cpan.org/perldoc?Modern::Perl">module</a> or <a href="http://www.enlightenedperl.org/">organization</a>.)</p>
<p>Firstly I&#8217;d like to highlight a couple of recent posts by Jonathan Rockway:</p>
<p>* <a href="http://blog.jrock.us/articles/Unshortening%20URLs%20with%20Modern%20Perl.pod">Unshortening URLs with Modern Perl</a>. An interesting example application built with modern perl modules like <a href="http://search.cpan.org/perldoc?MooseX::Declare">MooseX::Declare</a>, <a href="http://search.cpan.org/perldoc?MooseX::Getopt">MooseX::Getopt</a>, <a href="http://search.cpan.org/perldoc?HTTP::Engine">HTTP::Engine</a>, <a href="http://search.cpan.org/perldoc?AnyEvent::HTTP">AnyEvent::HTTP</a>, <a href="http://search.cpan.org/perldoc?TryCatch">TryCatch</a>, and <a href="http://www.iinteractive.com/kiokudb/">KiokuDB</a>.</p>
<p>* <a href="http://blog.jrock.us/articles/Multimethods.pod">Multimethods</a>. Another great example from Jonathan highlighting the combined power of <a href="http://search.cpan.org/perldoc?MooseX::Types">MooseX::Types</a>, <a href="http://search.cpan.org/perldoc?MooseX::Declare">MooseX::Declare</a>, and <a href="http://search.cpan.org/perldoc?MooseX::MultiMethods">MooseX:: MultiMethods</a>.</p>
<p>Then, from his work at the BBC, Curtis &#8220;<a href="http://use.perl.org/~Ovid/journal/">Ovid</a>&#8221; Poe has given us a great series of thoughtful posts on the benefits of replacing multiple inheritance with roles in a complex production code-base. The slides of his <a href="http://www.slideshare.net/Ovid/refactoring-with-roles-1298185">Refactoring With Roles</a> talk is a good place to start. Then dive in to the blog posts back <a href="http://use.perl.org/~Ovid/journal/38662">here</a> and work your way forward.</p>
<p>I &hearts; modern perl!</p>
<br />Posted in perl Tagged: modern perl, perl <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/261/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=261&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/04/27/examples-of-modern-perl/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>Generate Treemaps for HTML from Perl, please.</title>
		<link>http://blog.timbunce.org/2009/04/04/generate-treemaps-for-html-from-perl-please/</link>
		<comments>http://blog.timbunce.org/2009/04/04/generate-treemaps-for-html-from-perl-please/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 11:55:35 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[nytprof]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=258</guid>
		<description><![CDATA[Seeing this video of treemap for perlcritic memory usage reminded me of something&#8230;
I&#8217;d really like to be able to use treemaps in NYTProf reports to visualize the time spent in different parts, and depths, of the package namespace hierarchy. Currently that information is reported in a series of tables.
A much better interface could be provided [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=258&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Seeing <a href="http://www.youtube.com/watch?v=etYau_Xf9AM">this video</a> of treemap for perlcritic memory usage reminded me of something&#8230;</p>
<p>I&#8217;d <em>really</em> like to be able to use <a href="http://en.wikipedia.org/wiki/Treemap">treemaps</a> in <a href="http://blog.timbunce.org/tag/nytprof/">NYTProf</a> reports to visualize the time spent in different parts, and depths, of the package namespace hierarchy. Currently that information is <a href="http://blog.timbunce.org/2009/02/15/nytprof-208-better-faster-more-cuddly/">reported in a series of tables</a>.</p>
<p>A much better interface could be provided by treemaps. Ideally allowing the user to drill-down into deeper levels of the package namespace hierarchy. (It needn&#8217;t be <a href="http://www.youtube.com/watch?v=lQ5kiMwVtUY">this flashy</a>, just 2D would be fine :-)</p>
<p>In case you&#8217;re not familiar with them, treemaps are a great way to visualise hierarchical data. Here&#8217;s an example treemap of the disk space used by the files in a directory tree (from <a href="http://www.flickr.com/photos/schoschie/100056488/">schoschie</a>) <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" /></p>
<p>Perl already has a <a href="http://search.cpan.org/dist/Treemap/">Treemap</a> module, which can generate treemap images via the <a href="http://search.cpan.org/perldoc?Imager">Imager</a> module. Treemap is designed to support more output formats by sub-classing.</p>
<p>I guess it wouldn&#8217;t be hard to write a sub-class to generate HTML client-side <a href="http://www.w3.org/TR/REC-html40/struct/objects.html#h-13.6">image map</a> data along with the image, so clicks on the image could be used to drill-down into treemaps that have more detail of the specific area that was clicked on.</p>
<p>More interesting, and more flexible, would be a sub-class to generate the treemap as a Scalable Vector Graphics diagram using the <a href="http://search.cpan.org/dist/SVG/">SVG</a> module (and <a href="http://search.cpan.org/search?query=svg&amp;mode=dist">others</a>).</p>
<p>I&#8217;m not going to be able to work on either of those ideas anytime soon.</p>
<p>Any volunteers?</p>
<br />Posted in perl Tagged: nytprof, perl, visualization <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/258/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=258&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/04/04/generate-treemaps-for-html-from-perl-please/feed/</wfw:commentRss>
		<slash:comments>27</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/04/82244d56-fa2c-4044-ae46-ee53b63861be.jpg" medium="image">
			<media:title type="html">82244D56-FA2C-4044-AE46-EE53B63861BE.jpg</media:title>
		</media:content>
	</item>
		<item>
		<title>Perl DynaLoader hack using .bs files</title>
		<link>http://blog.timbunce.org/2009/04/01/perl-dynaloader-hack-using-bs-files/</link>
		<comments>http://blog.timbunce.org/2009/04/01/perl-dynaloader-hack-using-bs-files/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 12:18:05 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=249</guid>
		<description><![CDATA[I needed to install a perl extension from a third-party. It&#8217;s an interface to a shared library, a .so file, that they also supply.
Normally I&#8217;d add the directory containing the shared library to the LD_LIBRARY_PATH environment variable. Then when the extension is loaded the system dynamic loader can find it.
For various reasons I didn&#8217;t want [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=249&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I needed to install a perl extension from a third-party. It&#8217;s an interface to a shared library, a .so file, that they also supply.</p>
<p>Normally I&#8217;d add the directory containing the shared library to the LD_LIBRARY_PATH environment variable. Then when the extension is loaded the system dynamic loader can find it.</p>
<p>For various reasons I didn&#8217;t want to do that in this case.</p>
<p>An alternative approach is to pre-load the shared library with a flag to make it&#8217;s symbols globally available for later linking. (The flag is called <code>RTLD_GLOBAL</code> on Linux, Solaris and other systems that use <code>dlopen()</code>. This hack may not work on other systems.)</p>
<p>But how to pre-load the shared library, only when needed, and without changing any existing perl code? This is where the pesky little .bs files that get installed with perl extensions come in handy.</p>
<p>They&#8217;re known as &#8216;bootstrap&#8217; files. If the .bs file for an extension not empty then DynaLoader (and XSLoader) will execute the contents just before loading the shared object for the extension.</p>
<p>So I put code like this into the .bs file for the extension:</p>
<pre>    use DynaLoader;
    DynaLoader::dl_load_file("$ENV{...}/...so", 1)
	    or die DynaLoader::dl_error();
</pre>
<p>Not a recommended approach, but neat and handy for me in this case.</p>
<br />Posted in perl  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/249/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=249&subd=timbunce&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/04/01/perl-dynaloader-hack-using-bs-files/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>
	</channel>
</rss>