<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Not this...</title>
	
	<link>http://blog.timbunce.org</link>
	<description>Listen. Reflect. Explore. Solve.</description>
	<lastBuildDate>Mon, 06 Jul 2009 15:28:30 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<image><link>http://blog.timbunce.org</link><url>http://timbunce.wordpress.com/files/2008/02/timicon-64x64.png</url><title>Tim Bunce - Not this...</title></image>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/NotThis" type="application/rss+xml" /><item>
		<title>Customer Relationship Management (CRM) systems in Perl</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/mUYoGVn1l9Y/</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[<div class='snap_preview'><br /><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>
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" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=mUYoGVn1l9Y:UYe3ZvPIy5I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=mUYoGVn1l9Y:UYe3ZvPIy5I:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/mUYoGVn1l9Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/07/06/customer-relationship-management-crm-systems-in-perl/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2009/07/06/customer-relationship-management-crm-systems-in-perl/</feedburner:origLink></item>
		<item>
		<title>Unattributed copying of perl blog content via Planet Perl</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/EIBt3e7uzHI/</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[<div class='snap_preview'><br /><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>
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" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=EIBt3e7uzHI:b7dyGUWawMU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=EIBt3e7uzHI:b7dyGUWawMU:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/EIBt3e7uzHI" height="1" width="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>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2009/06/15/unattributed-copying-of-perl-blog-content-via-planet-perl/</feedburner:origLink></item>
		<item>
		<title>Has NYTProf helped you? Tell me how…</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/KY72Wgw2pcc/</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[<div class='snap_preview'><br /><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>
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" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=KY72Wgw2pcc:0a2iWy2lx24:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=KY72Wgw2pcc:0a2iWy2lx24:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/KY72Wgw2pcc" height="1" width="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&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2009/06/05/has-nytprof-helped-you-tell-me-how/</feedburner:origLink></item>
		<item>
		<title>Fixing the POD synopsis in OSX – take 2 (perldoc, nroff and UTF-8)</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/-LKrt9Qy20c/</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[<div class='snap_preview'><br /><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>
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" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=-LKrt9Qy20c:u_How0EU-eg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=-LKrt9Qy20c:u_How0EU-eg:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/-LKrt9Qy20c" height="1" width="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&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2009/05/19/fixing-the-pod-synopsis-in-osx-take-2-perldoc-nroff-and-utf-8/</feedburner:origLink></item>
		<item>
		<title>TIOBE Index is being gamed</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/_HYSM6LQVDI/</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[<div class='snap_preview'><br /><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>
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" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=_HYSM6LQVDI:eDSygTL2y7g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=_HYSM6LQVDI:eDSygTL2y7g:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/_HYSM6LQVDI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/05/17/tiobe-index-is-being-gamed/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2009/05/17/tiobe-index-is-being-gamed/</feedburner:origLink></item>
		<item>
		<title>Thanks, Iron Man, for the good excuse to perl blog</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/_IVe1rvop1Q/</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[<div class='snap_preview'><br /><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>
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" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=_IVe1rvop1Q:DeG939ChZlg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=_IVe1rvop1Q:DeG939ChZlg:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/_IVe1rvop1Q" height="1" width="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>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2009/05/10/thanks-iron-man-for-the-good-excuse-to-perl-blog/</feedburner:origLink></item>
		<item>
		<title>iPhoto – Removing redundant originals</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/oodUC8Mlazg/</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[<div class='snap_preview'><br /><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>
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" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=oodUC8Mlazg:RAk85bfOSfg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=oodUC8Mlazg:RAk85bfOSfg:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/oodUC8Mlazg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/04/27/iphoto-removing-redundant-originals/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2009/04/27/iphoto-removing-redundant-originals/</feedburner:origLink></item>
		<item>
		<title>Examples of Modern Perl</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/CB900YEoLeE/</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[<div class='snap_preview'><br /><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>
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" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=CB900YEoLeE:Ej6fAYnei9U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=CB900YEoLeE:Ej6fAYnei9U:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/CB900YEoLeE" height="1" width="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&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2009/04/27/examples-of-modern-perl/</feedburner:origLink></item>
		<item>
		<title>Generate Treemaps for HTML from Perl, please.</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/rHFDfqh4880/</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[<div class='snap_preview'><br /><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>
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" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=rHFDfqh4880:NIV-g2fbNr8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=rHFDfqh4880:NIV-g2fbNr8:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/rHFDfqh4880" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/04/04/generate-treemaps-for-html-from-perl-please/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&amp;d=identicon&amp;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>
	<feedburner:origLink>http://blog.timbunce.org/2009/04/04/generate-treemaps-for-html-from-perl-please/</feedburner:origLink></item>
		<item>
		<title>Perl DynaLoader hack using .bs files</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/OLKJQbaWyZE/</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[<div class='snap_preview'><br /><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>
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" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=OLKJQbaWyZE:O2I4SG3WOnM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=OLKJQbaWyZE:O2I4SG3WOnM:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/OLKJQbaWyZE" height="1" width="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&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2009/04/01/perl-dynaloader-hack-using-bs-files/</feedburner:origLink></item>
		<item>
		<title>NYTProf 2.09 – now handles modules using AutoLoader, like POSIX and Storable</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/3hD3H0aW09k/</link>
		<comments>http://blog.timbunce.org/2009/03/30/nytprof-209-now-handles-modules-using-autoloader-like-posix-and-storable/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 08:36:48 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[nytprof]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=247</guid>
		<description><![CDATA[I&#8217;ve uploaded Devel::NYTProf 2.09 to CPAN.
If you&#8217;re using VMS the big news is that Peter (Stig) Edwards has contributed patches that enable NYTProf to work on VMS. Yeah! Thanks Peter.
For the rest of us there&#8217;s only one significant new feature in this release: NYTProf now includes a heuristic (that&#8217;s geek for &#8220;it&#8217;ll be wrong sometimes&#8221;) [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=247&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;ve uploaded Devel::NYTProf 2.09 to CPAN.</p>
<p>If you&#8217;re using VMS the big news is that Peter (Stig) Edwards has contributed patches that enable NYTProf to work on VMS. Yeah! Thanks Peter.</p>
<p>For the rest of us there&#8217;s only one significant new feature in this release: NYTProf now includes a heuristic (that&#8217;s geek for &#8220;it&#8217;ll be wrong sometimes&#8221;) to handle modules using <a href="http://search.cpan.org/dist/AutoLoader/">AutoLoader</a>. The most common of which are Storable and POSIX. You may have encountered a warning like this when running nytprofhtml:</p>
<p>  <code>Unable to open '/../../lib/Storable.pm' for reading: No such file or directory</code></p>
<p>It&#8217;s a symptom of a deeper problem caused by <a href="http://search.cpan.org/perldoc?AutoSplit">AutoSplit</a>, the companion to AutoLoader. The details of the cause, effect, and fix aren&#8217;t worth going into now. If you&#8217;re interested you can read my <a href="http://groups.google.com/group/develnytprof-dev/tree/browse_frm/thread/2de2aecf1d5b153d/db48188f787b85d4?rnum=1&amp;q=Storable.pm&amp;_done=%2Fgroup%2Fdevelnytprof-dev%2Fbrowse_frm%2Fthread%2F2de2aecf1d5b153d%2F0f7ecccaca93b23d%3Flnk%3Dgst%26q%3DStorable.pm%26#doc_0f7ecccaca93b23d">summary</a> to the mailing list.</p>
<p>The upshot is that NYTProf now reports times for autoloaded subs as if the sub was part of the parent module. Just what you want. Time spent in the AUTOLOAD&#8217;er sub is also reported, naturally.</p>
<p>There is a small chance that the heuristic will pick the wrong &#8216;parent&#8217; module file for the autoloaded subroutine file. That can happen if there are other modules that use the same name for the last portion of the package name (e.g., Bar::Foo and Baz::Foo). If it ever happens to you, please let me know. Ideally with a small test case.</p>
<p>The list of changes can be found <a href="http://search.cpan.org/~timb/Devel-NYTProf-2.09/Changes#Changes_in_Devel::NYTProf_2.09_(svn_r733)_29th_March_2009">here</a> (or <a href="http://code.google.com/p/perl-devel-nytprof/source/list">here</a> if you&#8217;re a detail fanatic).</p>
<p>One other particularly notable item is that the <code>savesrc</code> option wasn&#8217;t working reliably. Thanks to Andy Grundman providing a good test case, that&#8217;s now been fixed.</p>
<p>Enjoy!</p>
Posted in perl Tagged: nytprof, performance <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/247/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/247/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/247/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/247/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/247/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=247&subd=timbunce&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=3hD3H0aW09k:HWMVmaAoaUI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=3hD3H0aW09k:HWMVmaAoaUI:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/3hD3H0aW09k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/03/30/nytprof-209-now-handles-modules-using-autoloader-like-posix-and-storable/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2009/03/30/nytprof-209-now-handles-modules-using-autoloader-like-posix-and-storable/</feedburner:origLink></item>
		<item>
		<title>Retreat</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/TK0mA5SjVOQ/</link>
		<comments>http://blog.timbunce.org/2009/03/15/retreat/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 22:55:43 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[health]]></category>
		<category><![CDATA[ireland]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=237</guid>
		<description><![CDATA[I usually get a cold around January. Nothing major, gone in a week or so. This year I excelled myself by succumbing to the &#8217;flu and following it up with assorted complications. January was mostly a write-off, February was better but still a struggle (what with jet lag and unexpected surprises). Fortunately my Functional Biochemistry [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=237&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I usually get a cold around January. Nothing major, gone in a week or so. This year I excelled myself by succumbing to the &rsquo;flu and following it up with assorted complications. January was mostly a write-off, February was better but still a struggle (what with jet lag and <a href="http://twitter.com/timbunce/status/1261584079">unexpected</a> <a href="http://twitter.com/timbunce/status/1261678444">surprises</a>). Fortunately my <a href="http://conscious.tv/healing.html?bcpid=1519719924&amp;bclid=1527696936&amp;bctid=1542695449">Functional Biochemistry</a> practitioner has pinpointed the underlying cause for the slow recovery and I&#8217;m fast returning to my usual good health.</p>
<p>My wife suggested I take some time-out for myself. After the rough few weeks I needed a boost, so I did&#8230;</p>
<p>I&#8217;m just back from a wonderful two day retreat organized by Timothy and Eva from the <a href="http://www.kalyanacentre.com">Kalyana Centre for Mindfulness</a> in Co. Kerry.</p>
<p>The retreat was held in silence, practising <a href="http://en.wikipedia.org/wiki/Kum_Nye">Kum Nye</a>, a Tibetan Buddhist movement practice. It was lead by Matthias Steurich &mdash; a rare opportunity to practice with him in Ireland. It was wonderful. Just what I needed.</p>
<p>The location was beautiful. A large house overlooking <a href="http://maps.google.co.uk/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=inch+strand,+kerry,+ireland&amp;sll=52.143058,-9.993563&amp;sspn=0.064472,0.17355&amp;ie=UTF8&amp;ll=52.164245,-9.976959&amp;spn=0.257767,0.694199&amp;t=k&amp;z=11">Inch Strand</a> in County Kerry in the West of Ireland. I took this photo on my iPhone on one of my walks along the beach:</p>
<p><img src="http://timbunce.files.wordpress.com/2009/03/img-0303.jpg?w=800&#038;h=600" alt="IMG_0303.JPG" border="0" width="800" height="600" /></p>
Posted in health, ireland  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/237/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/237/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/237/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/237/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/237/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/237/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=237&subd=timbunce&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=TK0mA5SjVOQ:-XEpXV-WX6k:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=TK0mA5SjVOQ:-XEpXV-WX6k:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/TK0mA5SjVOQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/03/15/retreat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2009/03/img-0303.jpg" medium="image">
			<media:title type="html">IMG_0303.JPG</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2009/03/15/retreat/</feedburner:origLink></item>
		<item>
		<title>NYTProf screencast from the 2008 London Perl Workshop</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/CspPP5ZUWV0/</link>
		<comments>http://blog.timbunce.org/2009/02/25/nytprof-screencast-from-the-2008-london-perl-workshop/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 03:09:21 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[nytprof]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=234</guid>
		<description><![CDATA[I&#8217;ve uploaded the screencast of my NYTProf talk at the London Perl Workshop in November 2008.
It&#8217;s based on a not-quite-2.08 version and includes some coverage of an early draft of the &#8216;timings per rolled-up package name&#8217; feature I discussed previously.
It also shows how and why anonymous subroutines, defined at the same line of different executions [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=234&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;ve uploaded the <a href="http://blip.tv/file/1812013">screencast of my NYTProf talk</a> at the <a href="http://conferences.yapceurope.org/lpw2008/talk/1673">London Perl Workshop</a> in November 2008.</p>
<p>It&#8217;s based on a not-quite-2.08 version and includes some coverage of an early draft of the &#8216;timings per rolled-up package name&#8217; feature I <a href="http://blog.timbunce.org/2009/02/15/nytprof-208-better-faster-more-cuddly/">discussed previously</a>.</p>
<p>It also shows how and why anonymous subroutines, defined at the same line of different executions of the same string eval, get &#8216;merged&#8217;.</p>
<p>The demos use perlcritic and Moose code. It also includes a nice demonstration showing NYTProf highlighting a performance problem with File::Spec::Unix when called using Path::Class::Dir objects.</p>
<p>It&#8217;s 36 minutes long, including a good Q&amp;A session at the end (wherein a market rate for performance improvements is established). Enjoy.</p>
Posted in perl Tagged: nytprof, performance, perl <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/234/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=234&subd=timbunce&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=CspPP5ZUWV0:gSzgt2_lSxM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=CspPP5ZUWV0:gSzgt2_lSxM:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/CspPP5ZUWV0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/02/25/nytprof-screencast-from-the-2008-london-perl-workshop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2009/02/25/nytprof-screencast-from-the-2008-london-perl-workshop/</feedburner:origLink></item>
		<item>
		<title>NYTProf 2.08 – better, faster, more cuddly</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/caUToDXCXo0/</link>
		<comments>http://blog.timbunce.org/2009/02/15/nytprof-208-better-faster-more-cuddly/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 22:06:45 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[nytprof]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=227</guid>
		<description><![CDATA[I&#8217;ve just released NYTProf 2.08 to CPAN, some three and a half months after 2.07.
If you&#8217;ve been profiling large applications then the first difference you&#8217;ll notice is that the new version generates reports much faster.
The next thing you may notice is that statement timings are now nicely formatted with units. Gisle Aas contributed the formatting [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=227&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;ve just released NYTProf 2.08 to CPAN, some three and a half months after 2.07.</p>
<p>If you&#8217;ve been profiling large applications then the first difference you&#8217;ll notice is that the new version generates reports <em>much</em> faster.</p>
<p><img src="http://timbunce.files.wordpress.com/2009/02/nytprof-208-timings1.png?w=326&#038;h=201" alt="NYTProf 2.08 timings.png" border="0" width="326" height="201" align="left" />The next thing you may notice is that statement timings are now nicely formatted with units. Gisle Aas contributed the formatting code for 2.07 but I had to do some refactoring to get it working for the statement timings.</p>
<p>Another nice refinement is that hovering over a time will show a tool-tip with the time expressed as a percentage of the overall runtime.</p>
<p>Almost all <em>the tables are now sortable</em>. I used <a href="http://jquery.com/">jQuery</a> and the <a href="http://tablesorter.com">tablesorter</a> plugin for that. I&#8217;ve not added any fancy buttons, just click on a table heading to sort by that column. You&#8217;ll see a little black arrow to show the column is sorted. (You can hold the shift key down to add second and third columns to the sort order.)</p>
<p>A profiler isn&#8217;t much use if it&#8217;s not accurate. NYTProf now has tests for correct handling of times for string evals within string evals. In fact the handling of string evals got a big overhaul for this version as part of ongoing improvements in the underlying data model. I&#8217;m working towards being able to show annotated performance reports for the <em>contents of string evals</em>. It&#8217;s not there yet, but definitely getting closer.</p>
<p>A related feature is the new <code>savesrc=1</code> option. When enabled, with a recent version of perl, the source code for each source file is written into the profile data file. That makes the profile self-contained and, significantly, means that accurate reports can be generated even after the original source files have been modified.</p>
<p>Another new option is <code>optimize=0</code>. You can use it to disable the <a href="http://www.google.com/search?q=perl+optimizer">perl optimizer</a>. That can be worth doing if the statement timings, or counts, for some chunk of code seem odd and you suspect that the perl optimizer has rewritten it.</p>
<p>The final new feature noted in the NYTProf 2.08 Changes file is that it&#8217;s now possible to generate multiple profile data files from a single application. Since v2.0 you could call <code>DB::disable_profile()</code> and <code>DB::enable_profile()</code> to control profiling at runtime. Now you can pass an optional filename to <code>enable_profile</code> to make it close the previous profile and open a new one. I imagine this would be most useful in long running applications where you&#8217;d leave profiling disabled (using the <code>start=none</code> option) and then call <code>enable_profile</code> and <code>disable_profile</code> around some specific code in specific situations &#8211; like certain requests to a mod_perl app.</p>
<p>There&#8217;s one more new feature that I&#8217;ve just realised I&#8217;d forgotten to add to the Changes file before the release: Timings per rolled-up package name. What&#8217;s that? Well, it&#8217;s probably easiest to show you&#8230;</p>
<p>These images are taken from a profile of <a href="http://search.cpan.org/perldoc?perlcritic">perlcritic</a>. Each shows the time spent exclusively in subroutines belonging to a certain package <em>and any packages below it</em>. Hovering over a time gives the percentage, so I can see that the 57.3s spent in the 36 PPI packages accounted for 42% of the runtime.</p>
<p><img src="http://timbunce.files.wordpress.com/2009/02/nytprof-208-pkg1.png?w=517&#038;h=321" alt="NYTProf 2.08 pkg1.png" border="0" width="517" height="321" /></p>
<p>This gives you a quick overview for large (wide) codebases that would be hard to get in any other way.</p>
<p>Tables are generated for upto five levels of package name hierarchy, so you can drill-down to finer levels of detail.</p>
<p><img src="http://timbunce.files.wordpress.com/2009/02/nytprof-208-pkg2.png?w=530&#038;h=322" alt="NYTProf 2.08 pkg2.png" border="0" width="530" height="322" /></p>
<p>&nbsp;</p>
<p><img src="http://timbunce.files.wordpress.com/2009/02/nytprof-208-pkg3.png?w=650&#038;h=322" alt="NYTProf 2.08 pkg3.png" border="0" width="650" height="322" /></p>
<p>I can visualize a much better UI for this data than the series of tables nytprofhtml currently produces, but my limited free time and jQuery skills prevent me doing more. Patches welcome, naturally.</p>
<p>Enjoy!</p>
<p>p.s. I&#8217;ve a screencast from my NYTProf talk at the London Perl Workshop in November I hope to (finally) upload soon. It includes a demo of the package roll-up timing tables.</p>
Posted in perl Tagged: nytprof, performance <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/227/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=227&subd=timbunce&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=caUToDXCXo0:_GLuP-mhNJM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=caUToDXCXo0:_GLuP-mhNJM:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/caUToDXCXo0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/02/15/nytprof-208-better-faster-more-cuddly/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2009/02/nytprof-208-timings1.png" medium="image">
			<media:title type="html">NYTProf 2.08 timings.png</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2009/02/nytprof-208-pkg1.png" medium="image">
			<media:title type="html">NYTProf 2.08 pkg1.png</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2009/02/nytprof-208-pkg2.png" medium="image">
			<media:title type="html">NYTProf 2.08 pkg2.png</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2009/02/nytprof-208-pkg3.png" medium="image">
			<media:title type="html">NYTProf 2.08 pkg3.png</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2009/02/15/nytprof-208-better-faster-more-cuddly/</feedburner:origLink></item>
		<item>
		<title>UltraDNS – A Perl Client API for NeuStar UltraDNS</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/nwdCFi6B8BY/</link>
		<comments>http://blog.timbunce.org/2009/01/28/ultradns-a-perl-client-api-for-neustar-ultradns/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 22:45:43 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[tigerlead]]></category>
		<category><![CDATA[ultradns]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=217</guid>
		<description><![CDATA[My first Open Source spin-off from TigerLead.com: UltraDNS a Perl client API for UltraDNS.
Posted in perl Tagged: tigerlead, ultradns      <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=217&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>My first Open Source spin-off from <a href="http://tigerlead.com">TigerLead.com</a>: <a href="http://search.cpan.org/perldoc?UltraDNS">UltraDNS</a> a Perl client API for UltraDNS.</p>
Posted in perl Tagged: tigerlead, ultradns <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/217/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=217&subd=timbunce&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=nwdCFi6B8BY:Kjdp3ae55KU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=nwdCFi6B8BY:Kjdp3ae55KU:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/nwdCFi6B8BY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/01/28/ultradns-a-perl-client-api-for-neustar-ultradns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2009/01/28/ultradns-a-perl-client-api-for-neustar-ultradns/</feedburner:origLink></item>
		<item>
		<title>Can you reproduce this NYTProf failure?</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/YLEMwEnzbWY/</link>
		<comments>http://blog.timbunce.org/2009/01/28/can-you-reproduce-this-nytprof-failure/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 22:24:12 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[nytprof]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=215</guid>
		<description><![CDATA[I&#8217;ve a new release of NYTProf ready to upload but I&#8217;m stuck.
The CPAN Testers service is reporting a failure on a number of systems but I can&#8217;t reproduce it locally or work out the cause.
Can you reproduce the failure with Devel::NYTProf 2.07_94? If so, could you give me remote access via ssh? (Or spare some [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=215&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;ve a new release of NYTProf ready to upload but I&#8217;m stuck.</p>
<p>The CPAN Testers service is reporting a <a href="http://bbbike.radzeit.de/~slaven/cpantestersmatrix.cgi?dist=Devel-NYTProf%202.07_94">failure on a number of systems</a> but I can&#8217;t reproduce it locally or work out the cause.</p>
<p>Can you reproduce the failure with <a href="http://search.cpan.org/~timb/Devel-NYTProf-2.07_94/">Devel::NYTProf 2.07_94</a>? If so, could you give me remote access via ssh? (Or spare some time to investigate yourself &#8211; I&#8217;ll happily clue you in if you can reproduce the problem.)</p>
<p><em>Update</em>: No one could reproduce it. It seems that the failures was not what it appeared to be. A clue was that only one tester was affected. Devel-NYTProf-2.07_94.tar.gz unpacked itself into a directory called Devel-NYTProf-2.07. It seems that when using  CPANPLUS if the user had already got an old Devel-NYTProf-2.07 directory its contents got merged and tests would fail. I&#8217;m not convinced that&#8217;s the whole story, but Devel-NYTProf-2.07_95.tar.gz unpacked into a Devel-NYTProf-2.07_95 directory and didn&#8217;t run into the problem.</p>
<p><em>Update</em>: More usefully, Andreas made <a href="http://www.nntp.perl.org/group/perl.qa/2009/01/msg11895.html">my wish</a> come true by <a href="http://www.nntp.perl.org/group/perl.qa/2009/01/msg11907.html">pointing out</a> the &#8211;solve parameter to the <a href="http://search.cpan.org/perldoc?ctgetreports">ctgetreports</a> utility in his <a href="http://search.cpan.org/dist/CPAN-Testers-ParseReport/">CPAN::Testers::ParseReports</a> distribution. It  &#8220;<em>tries to identify the best contenders for a blame using Statistics::Regression. [...] The function prints the [...]  top 3 candidates according to R^2 with their regression analysis.</em>&#8221; Cool.</p>
Posted in perl Tagged: nytprof <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/215/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=215&subd=timbunce&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=YLEMwEnzbWY:k-pYgMnTs1c:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=YLEMwEnzbWY:k-pYgMnTs1c:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/YLEMwEnzbWY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2009/01/28/can-you-reproduce-this-nytprof-failure/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2009/01/28/can-you-reproduce-this-nytprof-failure/</feedburner:origLink></item>
		<item>
		<title>Crouching Tiger</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/Ef6yC3DebkY/</link>
		<comments>http://blog.timbunce.org/2008/12/17/crouching-tiger/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 12:31:37 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[dashprofiler]]></category>
		<category><![CDATA[gofer]]></category>
		<category><![CDATA[nytprof]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[tigerlead]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=213</guid>
		<description><![CDATA[After almost exactly two years working for Shopzilla I&#8217;ve moved on.
I&#8217;ve enjoyed my time with Shopzilla, met some great people, and worked on some challenging problems. I&#8217;m especially grateful to them for giving me the opportunity to develop and release some very useful Open Source software: Gofer, DashProfiler, and especially NYTProf v2.
When I started with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=213&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>After almost exactly two years working for Shopzilla I&#8217;ve moved on.</p>
<p>I&#8217;ve enjoyed my time with Shopzilla, met some great people, and worked on some challenging problems. I&#8217;m especially grateful to them for giving me the opportunity to develop and release some very useful Open Source software: <a href="http://search.cpan.org/perldoc?DBD::Gofer">Gofer</a>, <a href="http://search.cpan.org/perldoc?DashProfiler">DashProfiler</a>, and especially <a href="http://search.cpan.org/perldoc?Devel::NYTProf">NYTProf v2</a>.</p>
<p>When I started with ValueClick back in 1999 it was a small company. Over the years I was with them it grew rapidly, both from within and via mergers. When I left in 2006 it had become a very large company. For me Shopzilla was always a very large company.</p>
<p>I <em>really</em> like to make a significant positive impact where I work. I believe I did that at ValueClick and Shopzilla, but it&#8217;s always easier at a smaller company. There&#8217;s far less inertia to overcome.</p>
<p>So I&#8217;m delighted to be working now at a small company with a great team, product, technology, approach, and growth: <a href="http://tigerlead.com/">TigerLead.com</a></p>
<p>I&#8217;m not keen on job titles, but I needed to put <em>something</em> on my <a href="http://www.linkedin.com/in/timbunce">LinkedIn profile</a>. After <a href="http://putthingsoff.com/dont-use-these-job-titles/">exploring</a> <a href="http://positivesharing.com/2007/12/who-cares-about-your-job-title-tell-me-what-you-do/">some</a> <a href="http://www.bullshitjob.com/titles.html">options</a> I settled on &#8220;Entropy Minimizer&#8221;!</p>
<p>I&#8217;m also delighted to be working with the <a href="http://www.postgresql.org/">PostgreSQL</a> database, at last, as I&#8217;ve not had a chance to work with it before. (Although I used to be good at tuning <a href="http://en.wikipedia.org/wiki/INGRES">Ingres</a>, the distant forerunner of PostgreSQL, back in the days when RDBMS were novel and we thought a 50MHz cpu was fast.)</p>
Posted in life, software Tagged: dashprofiler, gofer, nytprof, postgresql, tigerlead <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/213/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=213&subd=timbunce&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=Ef6yC3DebkY:NdOanbgustQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=Ef6yC3DebkY:NdOanbgustQ:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/Ef6yC3DebkY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2008/12/17/crouching-tiger/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2008/12/17/crouching-tiger/</feedburner:origLink></item>
		<item>
		<title>Dopplr vs Tripit</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/p7HfoaL4ZtM/</link>
		<comments>http://blog.timbunce.org/2008/11/17/dopplr-vs-tripit/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 12:46:49 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[sync]]></category>
		<category><![CDATA[travel]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=208</guid>
		<description><![CDATA[When arranging trips I used to manually enter the main details (dates, times, confirmation numbers, hotel addresses and phone numbers etc.) into iCal and forward confirmation emails to my wife so she&#8217;d have a copy if she needed them.
Then I discovered Tripit. Now I simply forward confirmation emails as they arrive to plan@tripit.com &#8211; something [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=208&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>When arranging trips I used to manually enter the main details (dates, times, confirmation numbers, hotel addresses and phone numbers etc.) into iCal and forward confirmation emails to my wife so she&#8217;d have a copy if she needed them.</p>
<p>Then I discovered <a href="http://www.tripit.com/people/Tim.Bunce">Tripit</a>. Now I simply forward confirmation emails as they arrive to plan@tripit.com &#8211; something I could easily automate. My iCal automatically sync&#8217;s with a feed from tripit that has <em>much</em> more information than I&#8217;d ever enter manually, including links back to tripit.com for the full details. That then syncs to my iPhone so the information is always at hand. Perfect, and perfectly simple.</p>
<p>As I&#8217;ve found the service <em>very</em> useful over many months and many trips, I recently sent tripit invites to a bunch of people, mainly Perl folk. Many joined. A few pointed out that they already used dopplr and wondered if tripit was the same. I didn&#8217;t know, so I took a look.</p>
<p>I signed up with dopplr and was happy to see that, like tripit, I could forward confirmation emails to dopplr. So I forwarded the flight and hotel emails for my upcoming <a href="http://conferences.yapceurope.org/lpw2008/">London Perl Workshop</a> trip. Just like tripit, dopplr parsed the emails and worked out I was making a flight from Shannon to London and staying in a hotel in London.</p>
<p>That was all it did, though. It hadn&#8217;t noted my confirmation codes, flight times, hotel address. It had remembered <em>nothing that would be useful to <strong>me</strong></em>.</p>
<p>All it had done was noted that I&#8217;d be in the same city as a few other people I know who use dopplr. tripit does that, but also let&#8217;s me control who sees which trips and who can <em>collaborate</em> with me on trips.</p>
<p>I did a quick search and found another <a href="http://www.openparenthesis.org/2007/10/03/tripit-dopplr">review</a> that reached a similar conclusion. It seems that dopplr are <a href="http://www.macroprinciples.com/2008/02/tripitdopplr-case-in-point/">better at publicity</a>, but tripit has the features I find genuinely useful.</p>
<p>To give it tripit a whirl, <em>all</em> you need to do is forward some recent confirmation emails to plan@tripit.com &#8211; you don&#8217;t even need to signup first.</p>
Posted in life, tech Tagged: email, sync, travel <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/208/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=208&subd=timbunce&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=p7HfoaL4ZtM:Goex-wwz_to:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=p7HfoaL4ZtM:Goex-wwz_to:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/p7HfoaL4ZtM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2008/11/17/dopplr-vs-tripit/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2008/11/17/dopplr-vs-tripit/</feedburner:origLink></item>
		<item>
		<title>NYTProf 2.07 – Even better, and now for Windows too</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/buxjXRD0qpY/</link>
		<comments>http://blog.timbunce.org/2008/11/01/nytprof-207-even-better-and-now-for-windows-too/#comments</comments>
		<pubDate>Sat, 01 Nov 2008 08:34:39 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[nytprof]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=195</guid>
		<description><![CDATA[NYTProf development rolls on, with 2.07 being another significant release.

After the fold is a summary of highlights from the many improvements, with images and links for you reading pleasure.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=195&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>NYTProf development rolls on, with 2.07 being another significant release.</p>
<p>Here&#8217;s a summary of highlights from the <a href="http://search.cpan.org/~timb/Devel-NYTProf/Changes">many improvements</a>.</p>
<h2>Windows, at last</h2>
<p>Windows wizard <a href="http://search.cpan.org/~jdb/">Jan Dubois</a> has contributed patches that enable NYTProf to run on Windows. Many thanks Jan!</p>
<h2>Corrected Subroutine Total Time</h2>
<p>A significant error in time reported as spent in a subroutine has been fixed. It was showing the sum of the inclusive and exclusive time instead of just the inclusive time.</p>
<h2>String Evals</h2>
<p>One of NYTProf&#8217;s innovative features is tracking of subroutine calls <em>by calling location</em>. In earlier versions you couldn&#8217;t see calls made from within string evals. Now you can. Even for evals within evals:</p>
<div style="text-align:center;"><img src="http://timbunce.files.wordpress.com/2008/11/nytprof-string-eval.png?w=777&#038;h=389" alt="NYTProf string eval.png" border="0" width="777" height="389" /></div>
<p>That&#8217;s a big step forward for profiling code that makes heavy use of evals.</p>
<p>(The use of the &micro; micro symbol is also new &#8211; part of some helpful interface polishing contributed by <a href="http://search.cpan.org/~gaas/">Gisle Aas</a>. They&#8217;re not used on the statement timings yet, but will be at some point.)</p>
<h2>Recursion</h2>
<p>Previously the &#8216;inclusive time&#8217; reported for a subroutine wasn&#8217;t useful for subroutines called recursively. The overall inclusive time included the inclusive time of nested calls, typically inflating it beyond usefulness.</p>
<p>Now the inclusive time only measures the inclusive time of the <em>outermost</em> calls. NYTProf now also tracks and reports the <em>maximum call depth</em> for each calling location.</p>
<h2>Disabling the Statement Profiler</h2>
<p>NYTProf started life as a statement profiler. I added a subroutine profiler later and was delighted with how well that worked out. The subroutine profiler is novel in a few ways and also extremely robust and efficient. Part of the efficiency comes from not streaming data to disk while the program is running. It accumulates the counts and timings in memory.</p>
<p>When profiling large and/or performance sensitive applications the costs of NYTProf&#8217;s statement profiler, in performance impact and disk space, can be prohibitive. So now I&#8217;ve added an option to disable the statement profiler. Setting the <code>stmts=0</code> option turns NYTProf into a very lightweight subroutine profiler.</p>
<h2>Caller Information for XSubs</h2>
<p>NYTProf reports time spent in subroutines broken down by calling location. It&#8217;s one of its key features. The caller details are embedded as comment annotation into the report for each perl source code file.</p>
<p>That has worked very well for perl subs, but there&#8217;s no natural home for XS subroutines because there was no source code file available to annotate.</p>
<p>There&#8217;s a partial solution included in NYTProf 2.07: XS subs that are in the same package as profiled perl subs, get annotated subroutine &#8217;stubs&#8217; appended to the report for the corresponding perl source file.</p>
<p>It works quite well, in particular the common UNIVERSAL methods get annotated:</p>
<div style="text-align:center;"><img src="http://timbunce.files.wordpress.com/2008/11/nytprof-xsub-callers.png?w=756&#038;h=114" alt="NYTProf xsub callers.png" border="0" width="756" height="114" /></div>
<p>Also, now these subs have a place in the reports, any references to them are hyper links, naturally.</p>
<p>Sadly it doesn&#8217;t work so well for packages that don&#8217;t contain any perl subs, like <code>DBI::st</code>. I plan to add per-package report pages for them in a future release.</p>
<h2>Clock Docs</h2>
<p>I&#8217;ve greatly expanded the <a href="http://search.cpan.org/~timb/Devel-NYTProf/lib/Devel/NYTProf.pm#CLOCKS">description of the various clocks</a> available for profiling: POSIX real-time clocks, <code>gettimeofday()</code>, and <code>Time::HiRes</code>.</p>
<p>I&#8217;ve also added a <a href="http://search.cpan.org/~timb/Devel-NYTProf/lib/Devel/NYTProf.pm#SMP_Systems">caveats</a> section that discusses issues with SMP systems, processor affinity, and virtual machines.</p>
<h2>Feedback Wanted</h2>
<p>How has NYTProf helped you optimize your applications? Let me know.</p>
<p>Perhaps as blog posts of your own, linking back here, or comments here, or <a href="http://cpanratings.perl.org/d/Devel-NYTProf">CPAN ratings</a>, or email to <a href="http://groups.google.com/group/develnytprof-dev/">the mailing list</a> or just to me. I&#8217;d love to hear from you.</p>
<p>Thanks!</p>
Posted in perl Tagged: nytprof, performance <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/195/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/195/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/195/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/195/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/195/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=195&subd=timbunce&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=buxjXRD0qpY:oGGeyvT5t1U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=buxjXRD0qpY:oGGeyvT5t1U:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/buxjXRD0qpY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2008/11/01/nytprof-207-even-better-and-now-for-windows-too/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2008/11/nytprof-string-eval.png" medium="image">
			<media:title type="html">NYTProf string eval.png</media:title>
		</media:content>

		<media:content url="http://timbunce.files.wordpress.com/2008/11/nytprof-xsub-callers.png" medium="image">
			<media:title type="html">NYTProf xsub callers.png</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2008/11/01/nytprof-207-even-better-and-now-for-windows-too/</feedburner:origLink></item>
		<item>
		<title>NYTProf 2.05 – assorted fixes</title>
		<link>http://feedproxy.google.com/~r/NotThis/~3/_2uE3Iw3jhc/</link>
		<comments>http://blog.timbunce.org/2008/10/08/nytprof-205-assorted-fixes/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 23:34:53 +0000</pubDate>
		<dc:creator>TimBunce</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[nytprof]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=192</guid>
		<description><![CDATA[Hot on the heels of NYTProf 2.04, I&#8217;ve just released NYTProf 2.05. It has a few small but significant bug fixes. From the Changes file:

  Fixed alteration of $! during profiling, thanks to Slaven Rezic.
  Fixed clock_gettime() clock selection to fallback to CLOCK_REALTIME
    if CLOCK_MONOTONIC is not available, e.g, on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=192&subd=timbunce&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hot on the heels of NYTProf 2.04, I&#8217;ve just released NYTProf 2.05. It has a few small but significant bug fixes. From the Changes file:</p>
<pre>
  Fixed alteration of $! during profiling, thanks to Slaven Rezic.
  Fixed clock_gettime() clock selection to fallback to CLOCK_REALTIME
    if CLOCK_MONOTONIC is not available, e.g, on linux 2.4.
  Fixed error when application ends after DB::disable_profile().
  Added some docs to Devel::NYTProf::Apache
  Added clock=N option to enable user to select the clock.
</pre>
<p>All the bugs were long-standing ones that happened to come to light and get fixes after 2.04 was released.</p>
<p>The first was the cause of a couple of <a href="http://rt.cpan.org/Ticket/Display.html?id=39396">odd</a> <a href="http://rt.cpan.org/Ticket/Display.html?id=39773">bugs</a> were applications would behave differently when profiled. The problem was that in certain situations the profiler would alter the value of $! between statements, so code that tested for $! would think something had gone wrong.</p>
<p>The second caused weird timing values on some platforms. The statement times would be zero and the subroutine times would be garbage. The problem was that some systems, such as Linux 2.4, define the CLOCK_MONOTONIC macro but don&#8217;t implement that clock in the kernel. NYTProf wasn&#8217;t testing that the clock worked. Now it does. If the clock_gettime() call fails with the selected clock it falls back to CLOCK_REALTIME (and if that fails NYTProf aborts).</p>
<p>As a bonus I&#8217;ve added the ability to select what clock you want to use by setting <code>clock=<em>N</em></code> in the NYTPROF environment variable, where N is the integer id of the clock you want to use (usually you can find the CLOCK_* macros in the /usr/include/time.h file). This only works if your system supports <a href="http://www.freebsd.org/cgi/man.cgi?query=clock_gettime">clock_gettime()</a>, which most modern unix-like systems do, with the notable exception of OS X.</p>
<p>Why would you want to use a different clock?</p>
<p>Well the default, CLOCK_MONOTONIC, is <a href="http://www.nabble.com/Micro-benchmark-for-various-time-syscalls...-to17594175.html#a17606351">relatively expensive</a> to call, and NYTProf calls it <em>twice per statement</em>. So it&#8217;s the dominant cost of the profiler.</p>
<p>Some systems, like Linux 2.6, offer other clocks, like CLOCK_MONOTONIC_FAST that returns the most recently <em>cached</em> value of the clock. That&#8217;s typically just 1/10th the cost of CLOCK_MONOTONIC, so your code runs much faster under the profiler.</p>
<p>Naturally there&#8217;s a trade-off: the accuracy of the timings drops significantly. Still <a href="http://blog.timbunce.org/2008/07/12/devel-dprof-broken-by-the-passage-of-time/">far better than Devel::DProf</a>, but far worse than normal. You&#8217;re dependent on how often the cached time value gets updated by your kernel. I saw a figure of &#8220;600 times per second&#8221; quoted for one system, but I can&#8217;t find the link now. My advice would be to steer clear of this feature unless you feel comfortable with the issues <a href="http://www.nabble.com/Micro-benchmark-for-various-time-syscalls...-to17594175.html#a17606351">like</a> <a href="http://sean.chittenden.org/news/2008/06/01/">these</a>.</p>
<p>Enjoy!</p>
Posted in perl Tagged: nytprof, performance <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timbunce.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timbunce.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/timbunce.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/timbunce.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/timbunce.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/timbunce.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/timbunce.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/timbunce.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/timbunce.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/timbunce.wordpress.com/192/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.timbunce.org&blog=2562816&post=192&subd=timbunce&ref=&feed=1" /></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/NotThis?a=_2uE3Iw3jhc:ktXIXQozO8I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/NotThis?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/NotThis?a=_2uE3Iw3jhc:ktXIXQozO8I:bcOpcFrp8Mo"><img src="http://feeds.feedburner.com/~ff/NotThis?d=bcOpcFrp8Mo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NotThis/~4/_2uE3Iw3jhc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.timbunce.org/2008/10/08/nytprof-205-assorted-fixes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1cf82705f5ab43c73273ab5d690866b3?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">TimBunce</media:title>
		</media:content>
	<feedburner:origLink>http://blog.timbunce.org/2008/10/08/nytprof-205-assorted-fixes/</feedburner:origLink></item>
	</channel>
</rss>
