<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
   <title>Code / Appnel Solutions</title>
   <link rel="alternate" type="text/html" href="http://appnel.com/code/" />
   
   <id>tag:appnel.com,2005-03-28:/code//1</id>
   <updated>2008-07-10T21:29:27Z</updated>
   
   <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.21-en</generator>

<link rel="self" href="http://feeds.feedburner.com/AppnelSolutions" type="application/atom+xml" /><feedburner:emailServiceId>421004</feedburner:emailServiceId><feedburner:feedburnerHostname>http://www.feedburner.com</feedburner:feedburnerHostname><entry>
   <title>Mea code? Mea culpa!</title>
   <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/AppnelSolutions/~3/332098367/mea-code-mea-culpa" />
   <id>tag:appnel.com,2008:/code//1.640</id>
   
   <published>2008-07-10T20:49:40Z</published>
   <updated>2008-07-10T21:29:27Z</updated>
   
   <summary>Appnel plugin downloads should be back to normal. Sorry for the inconvenience.</summary>
   <author>
      <name>Timothy Appnel</name>
      <uri>http://appnel.com/</uri>
   </author>
   
   <category term="annoyances" label="annoyances" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="bugs" label="bugs" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="code" label="code" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="downloads" label="downloads" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="oops" label="oops" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="plugins" label="plugins" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://appnel.com/code/">
      &lt;p&gt;Just a quick note for anyone who tried to download any of my plugins. A hasty upgrade a week or so ago to appnel.com exposed a bug that made downloads impossible. Thanks to all who reported it. I made a fix the other day and things should be back to normal. Sorry for the inconvenience.&lt;/p&gt;

      

   &lt;img src="http://feeds.feedburner.com/~r/AppnelSolutions/~4/332098367" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://appnel.com/code/log/2008/07/mea-code-mea-culpa</feedburner:origLink></entry>

<entry>
   <title>YAPC MTOS and Amazon Web Services Presentations</title>
   <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/AppnelSolutions/~3/316455055/yapc-mtos-and-aws" />
   <id>tag:appnel.com,2008:/code//1.639</id>
   
   <published>2008-06-20T20:02:50Z</published>
   <updated>2008-06-20T20:27:38Z</updated>
   
   <summary>I'm back after three near sleepless days in Chicago attending and speaking at YAPC:NA (Yet Another Perl Conference North America), here are my presentations and example code.</summary>
   <author>
      <name>Timothy Appnel</name>
      <uri>http://appnel.com/</uri>
   </author>
   
   <category term="amazon" label="Amazon" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="cloud" label="cloud" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="mtos" label="MTOS" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="presentation" label="presentation" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="s3" label="S3" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="yapc" label="YAPC" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://appnel.com/code/">
      &lt;p&gt;I&amp;#8217;m back after three near sleepless days in Chicago attending and speaking at &lt;a href="http://conferences.mongueurs.net/yn2008/"&gt;YAPC:NA (Yet Another Perl Conference North America)&lt;/a&gt;. I wish I had more time to take in Chicago, but it was great to meet some many of the various Perl coders including the father of Perl, Larry Wall, who&amp;#8217;s efforts continue to make the community thrive.&lt;/p&gt;

&lt;p&gt;Both of my presentations where geared towards advocacy of MTOS and my latest project &lt;a href="http://code.google.com/p/bezos/"&gt;Bezos&lt;/a&gt;, an effort to create an integrated library for working with the Amazon Web Services cloud and eventually a command line tools.&lt;/p&gt;

&lt;p&gt;PDF copies of both including the example code I showed are below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span class="mt-enclosure mt-enclosure-file" style="display: inline;"&gt;&lt;a href="http://appnel.com/code/2008/06/20/yapc-na-2008-mtos.pdf"&gt;Movable Type Open Source (MTOS) for the Perl Developer&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="mt-enclosure mt-enclosure-file" style="display: inline;"&gt;&lt;a href="http://appnel.com/code/2008/06/20/yapc-na-2008-aws.pdf"&gt;Gluing Together Amazon Web Services with Perl&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="mt-enclosure mt-enclosure-file" style="display: inline;"&gt;&lt;a href="http://appnel.com/code/2008/06/20/yapc-na-2008-aws-example-code.zip"&gt;Gluing Together Amazon Web Services with Perl Examples&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;BTW:&lt;/strong&gt; For those in attendance or if the video that as was shot during my Amazon presentation makes it into circulation, I reset my security keys. I used the &lt;a href="http://people.no-distance.net/ol/software/s3/"&gt;S3 Browser&lt;/a&gt; to show how some of the scripts had worked and that app has the annoying trait of displaying all of your account information on startup. I knew that, but did it anyway knowing I could just reset my key.&lt;/p&gt;

      

   &lt;img src="http://feeds.feedburner.com/~r/AppnelSolutions/~4/316455055" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://appnel.com/code/log/2008/06/yapc-mtos-and-aws</feedburner:origLink></entry>

<entry>
   <title>On the Decentralization, Diversification and Colonization of Perl </title>
   <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/AppnelSolutions/~3/309266686/on-the-decentralization-diversification-and-colonization-of-perl" />
   <id>tag:appnel.com,2008:/code//1.638</id>
   
   <published>2008-06-11T01:48:22Z</published>
   <updated>2008-06-11T18:23:15Z</updated>
   
   <summary>As I begin to prepare my presentations for next week's YAPC::NA conference I feel compelled to finally throw down the gauntlet and write about important points that seemed to be missed by most of the Perl community.</summary>
   <author>
      <name>Timothy Appnel</name>
      <uri>http://appnel.com/</uri>
   </author>
   
   <category term="andylester" label="Andy Lester" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="barrierstoentry" label="barriers to entry" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="perlbuzz" label="Perl Buzz" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="rubyonrails" label="Ruby on Rails" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://appnel.com/code/">
      &lt;p&gt;I&amp;#8217;ve been meaning to write this post for some time, but &lt;a href="http://timaoutloud.org/2008/04/brooklyn"&gt;my relocation&lt;/a&gt;, client work and now sweltering heat has kept me busy. As I begin to prepare &lt;a href="http://appnel.com/code/log/2008/05/appnel-yapc-na-2008"&gt;my presentations for next week&amp;#8217;s YAPC::NA conference&lt;/a&gt; I feel compelled to finally throw down the gauntlet and write because I believe they are important points that seemed to be missed by most of the Perl community.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve been following Andy Lester&amp;#8217;s &lt;a href="http://perlbuzz.com/"&gt;Perl Buzz&lt;/a&gt; blog since it launch and applaud his efforts to bring &amp;#8220;fresh blood&amp;#8221; to the Perl community. Like Lester I believe the Perl community has a lot to offer and by no means is a dying or irrelevant language. What I believe it does suffer from is what I will call a marketing problem. Some of it is &amp;#8220;visibility&amp;#8221; as Lester refers to it, but more of it is packaging, perception and presentation.&lt;/p&gt;

&lt;p&gt;This thought has stuck with me for years, but it wasn&amp;#8217;t until I read Lester&amp;#8217;s &lt;a href="http://perlbuzz.com/"&gt;Perl must decentralize, diversify and colonize&lt;/a&gt; post that I that I felt it was time to write about it here.&lt;/p&gt;

&lt;p&gt;If you haven&amp;#8217;t read &lt;a href="http://perlbuzz.com/"&gt;the post I&amp;#8217;m referring to&lt;/a&gt; or follow &lt;a href="http://perlbuzz.com/"&gt;Perl Buzz&lt;/a&gt; I suggest you do. &lt;/p&gt;

&lt;p&gt;So let me state upfront again that, for the most part, I agree with most of what Lester wrote. &lt;/p&gt;

&lt;p&gt;I said for the most part though. Where I differ is in why other languages, PHP and Ruby (with Rails), are more en vogue. To me these are important points that are getting missed and overlooked by the Perl community that has lead to this condition.&lt;/p&gt;

&lt;p&gt;These points are most apparent by comments made in the lead up to his three objects &amp;#8212; decentralize, diversify, and colonize.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I&amp;#8217;m certain that PHP has become a &lt;em&gt;de facto&lt;/em&gt; choice for basic web apps because it&amp;#8217;s just How You Do It these days. You see enough PHP in the context of the web, it starts to sink in.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is generally true, but this view overlooks how PHP came to such a place of prominence in the web applications ecosystem. I don&amp;#8217;t think PHP is a better then Perl in any means, in fact &lt;a href="http://timaoutloud.org/2006/02/tim-bray-on-php"&gt;I thinks it&amp;#8217;s pretty crappy stuff&lt;/a&gt; that I&amp;#8217;ve never liked working with. &lt;strong&gt;Still PHP succeeded because it was just good enough and made running web application easier then anything else for most people.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PHP was free unlike Application Server Pages (ASP) or ColdFusion and was easier for hosting providers to offer and maintain then alternatives such as mod_perl or the resurgent FastCGI. It&amp;#8217;s popularity was further enhanced as a default module of Apache making it&amp;#8217;s availability through cheap shared hosting nearly ubiquitous.&lt;/p&gt;

&lt;p&gt;Of course Perl and CGI for that matter is equally as ubiquitous, but they were and still are perceived as a less attractive option to many because it is harder to get something up and running.  FTP a text file with a mix of HTML and PHP script and a &lt;em&gt;.php&lt;/em&gt; extension and presto! it runs. Unless severely abused, PHP is more responsive because its engine is typically persistent thereby avoiding the performance tax any language running through CGI must pay. PHP does require a server restart like FastCGI or mod_perl to pickup changes either. Further, numerous vital (and then some) libraries come built-in and are then easily accessed where others languages like Perl leave that to the user assuming they have the rights to do so. The hosting provider could, and indeed some good ones will install a lot more then just the core distribution, but knowledgeable Perl hosts seem to be few and far between these days.&lt;/p&gt;

&lt;p&gt;As an active member of the Movable Type community I&amp;#8217;ve seen the difficulties Perl/CGI issues have caused users and impacted interest in Perl with a broader less adept user base.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Why is Ruby on Rails so popular? Is it better than Perl on Catalyst? Or is it just that people hear about Rails more? I suspect the latter, because &lt;strong&gt;perception is reality&lt;/strong&gt;. When people perceive Perl as being dead, or not as powerful as other tools, it might as well be.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I whole-heartedly agree with Lester&amp;#8217;s observation that perception is reality. Like his observation about PHP I think it misses an important point though.&lt;/p&gt;

&lt;p&gt;Rails, in which Ruby would still be nowhere, made it easier for more professional developers to write applications with great user experiences quickly and easily. &lt;strong&gt;The genius of Rails is in its marketing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I remember when &lt;a href="http://timaoutloud.org/2005/08/oscon-wrap-up"&gt;I first heard David Heinemeier Hansson present on Rails&lt;/a&gt; how intrigued and even excited I was with how productive a developer could be. What really made Rails work so well in this context was that it was &amp;#8220;opinionated software&amp;#8221; that said &amp;#8220;flexibility is overrated.&amp;#8221;&lt;/p&gt;

&lt;p&gt;This is of course heresy to the Perl community, but &lt;strong&gt;I think that perhaps the Perl community&amp;#8217;s treasured there-is-more-than-one-way-to-do-it ethos needs to be broadened to include that sometimes one (highly preferred) way of doing things as an acceptable option.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;This is why &lt;a href="http://timaoutloud.org/2005/07/nat-nails-rails"&gt;I was disappointed when I read about Catalyst&lt;/a&gt;. This is not to say that I think Catalyst is bad or not capable. It&amp;#8217;s that it missed the most important advantage of Rails and why it was so successful in attracting a large fanatical community of developers so quickly. Catalyst wasn&amp;#8217;t what I wanted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I think there is a large group of users that don&amp;#8217;t care about choice, but getting their job done as quickly and easily as possible.&lt;/strong&gt; Business managers, entrepreneurs, investors, and the technologists working for them don&amp;#8217;t care if a web application is written in Ruby or Perl or PHP or Java. What they do care about is providing a great user experience that will attract and delight users, grow a company, and provide the best return on their investment in time and effort.&lt;/p&gt;

&lt;p&gt;Rails made that possible by having an opinion on its conventions (over configuration), JavaScript/AJAX libraries and so on that allowed it to create tool and libraries which helped developers write less software.&lt;/p&gt;

&lt;p&gt;This is why so many of the most popular sites and web applications to launch are written using Rails, not just because people hear about it more.&lt;/p&gt;

&lt;p&gt;PHP and Ruby on Rails lowered the barriers to entry and have reaped the benefits. Capable and powerful as it is, Perl has not.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m not sure precisely what moves the Perl community has to make, but I&amp;#8217;m certain that without more (a lot more) attention to perception and marketing of Perl interest will wane. No amount of language theory or lightning talks or state of the onion will stop that.&lt;/p&gt;

&lt;p&gt;I do hope that the Perl community does decentralize, diversify and colonize and that a big part of that work includes making it easier for developers to use and deploy Perl applications.&lt;/p&gt;

      

   &lt;img src="http://feeds.feedburner.com/~r/AppnelSolutions/~4/309266686" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://appnel.com/code/log/2008/06/on-the-decentralization-diversification-and-colonization-of-perl</feedburner:origLink></entry>

<entry>
   <title>On MT Feed Support</title>
   <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/AppnelSolutions/~3/287069007/on-mt-feed-support" />
   <id>tag:appnel.com,2008:/code//1.637</id>
   
   <published>2008-05-09T20:11:43Z</published>
   <updated>2008-05-09T20:18:12Z</updated>
   
   <summary>The next version of Movable Type, version 4.15 (aka "Cal"), will remove the RSS feed template from the defaults. There is no longer any practical reason to have multiple feed formats of the same information.</summary>
   <author>
      <name>Timothy Appnel</name>
      <uri>http://appnel.com/</uri>
   </author>
   
   <category term="atom" label="Atom" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="feeds" label="feeds" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="mt415" label="MT4.15" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="rss" label="RSS" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="syndication" label="syndication" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="usability" label="usability" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://appnel.com/code/">
      &lt;p&gt;The next version of Movable Type, version 4.15 (aka &amp;#8220;Cal&amp;#8221;), will remove the RSS feed template from the defaults. This touched off a thread recently was spread across the mtos-dev and ProNet mailing lists discussing the reasoning and potential drawbacks to this decision.&lt;/p&gt;

&lt;p&gt;Feeds is &lt;a href="http://appnel.com/code/feeds-app"&gt;a topic near and dear to my heart&lt;/a&gt; that &lt;a href="http://timaoutloud.org/topics/syndication/"&gt;I have a long history with&lt;/a&gt;. Seems we as a whole have never gotten over all FUD and misinformation of the &amp;#8220;syndication wars&amp;#8221; that some clarity is needed. Here is the most important takeaway from this post:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There is no longer any practical reason to have multiple feed formats of the same information.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It seems this issue comes up every so often.&lt;/p&gt;

&lt;p&gt;Any feed reader or software the consumes feeds worth anything can handle both RSS or Atom feeds. Every modern programming language I know of also have libraries from processing both. Not all take advantage of the more specialized and esoteric features of either &amp;#8212; some do, but for most uses either if fine.&lt;/p&gt;

&lt;p&gt;Choosing one or the other isn&amp;#8217;t choosing sides. It&amp;#8217;s a matter of usability and practicality. Having the same feed information in multiple formats forces a user to make a choice that they probably don&amp;#8217;t understand and one that is ultimately unnecessary. &lt;a href="http://textism.com/2008/04/19/please.stop.doing.this"&gt;Dean Allen recently wrote about it&lt;/a&gt; and before that &lt;a href="http://nick.typepad.com/blog/2006/05/pick_a_format_a.html"&gt;Nick Bradbury&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But why did Six Apart choose Atom instead of RSS? MT Product Manager, &lt;a href="http://www.sixapart.com/pipermail/mtos-dev/2008-April/001182.html"&gt;Byrne Reese posted&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This decision was never about standards politics or what format is better than the other, this release is about performance, and in this day and age, there is no need to publish feeds in multiple formats when they are supported equally[1].&lt;/p&gt;
  
  &lt;p&gt;We selected Atom because all things being equal, Atom is an Internet standard and RSS is not, and that is more closely aligned with &lt;a href="http://www.movabletype.org/opensource/"&gt;MTOS&amp;#8217; stated project goals&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;[1] Here Byrne asked a post to identify which tools do not support Atom.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s also worth mentioning that MT (and other Six Apart tools) are standardizing on the Atom Publishing Protocol (AtomPub) for remote clients to interact with the system. AtomPub uses the same format. RSS does not have an equivalent web services API option. Besides that, there are numerous &lt;a href="http://www.37signals.com/svn/archives2/safari_rss_posts_leave_me_hanging.php"&gt;flaws in the design of RSS that can and often does confuse news readers&lt;/a&gt;. The RSS specification is frozen with these flaws; however, there are &lt;a href="http://www.rssboard.org/rss-profile"&gt;groups attempting to address them in other ways&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;From a software architecture and engineering perspective, to me, it&amp;#8217;s quite logical that Atom be used. Popularity, as some as cited, is irrelevant given the circumstances and does not make the tool better.&lt;/p&gt;

&lt;p&gt;This decision will only effect new blogs created in MT 4.15 and future versions. It does not stop you from using and creating your own RSS feeds nor will it delete, remove or disable them from your current blog templates. &lt;/p&gt;

&lt;p&gt;That said, if you are producing feeds in multiple formats, I recommend you pick one and redirect the traffic to the others to that one. Doing so will help improve performance as Byrne suggests in his reply, means one or more less files to generate when a new post in made.&lt;/p&gt;

&lt;p&gt;Have a software product that can&amp;#8217;t read Atom files? Post them in the comments.&lt;/p&gt;

      

   &lt;img src="http://feeds.feedburner.com/~r/AppnelSolutions/~4/287069007" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://appnel.com/code/log/2008/05/on-mt-feed-support</feedburner:origLink></entry>

<entry>
   <title>Appnel @ YAPC:NA 2008</title>
   <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/AppnelSolutions/~3/281654909/appnel-yapc-na-2008" />
   <id>tag:appnel.com,2008:/code//1.635</id>
   
   <published>2008-05-01T19:43:55Z</published>
   <updated>2008-05-01T19:47:24Z</updated>
   
   <summary>I'll be presenting at YAPC:NA 2008 on MTOS and using Amazon Web Services with Perl.</summary>
   <author>
      <name>Timothy Appnel</name>
      <uri>http://appnel.com/</uri>
   </author>
   
   <category term="amazon" label="amazon" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="chicago" label="Chicago" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="conferences" label="conferences" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="mtos" label="MTOS" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="yapc" label="YAPC" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://appnel.com/code/">
      &lt;p&gt;Well I didn&amp;#8217;t get a spot to present as OSCON this year, but I was pretty pleased to hear from the organizers of &lt;a href="http://conferences.mongueurs.net/yn2008/"&gt;YAPC:NA (Yet Another Perl Conference North America)&lt;/a&gt; that not one, but two of my proposals where accepted &amp;#8212; in back-to-back sessions nonetheless.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://conferences.mongueurs.net/yn2008/talk/968"&gt;‎Movable Type Open Source (MTOS) for the Perl Developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://conferences.mongueurs.net/yn2008/talk/969"&gt;‎Gluing Together Amazon Web Services with Perl‎&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The conference is being held in Chicago June 16-18. The the schedule is &lt;a href="http://conferences.mongueurs.net/yn2008/schedule"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I haven&amp;#8217;t been to YAPC before so it should be interesting. From what I understand this conference is for the most hardcore of Perl programmers. I have some big plans for what I want to present and will be praying to the gods of &amp;#8220;free time&amp;#8221; to find some.&lt;/p&gt;

      

   &lt;img src="http://feeds.feedburner.com/~r/AppnelSolutions/~4/281654909" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://appnel.com/code/log/2008/05/appnel-yapc-na-2008</feedburner:origLink></entry>

<entry>
   <title>Meet The WordPresses</title>
   <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/AppnelSolutions/~3/273212284/meet-the-wordpresses" />
   <id>tag:appnel.com,2008:/code//1.633</id>
   
   <published>2008-04-18T23:03:46Z</published>
   <updated>2008-04-18T23:12:52Z</updated>
   
   <summary>Monitoring the LinkedIn blogging questions, I've seen questions that asked for advice on TypePad vs. WordPress that then received confused answers. Which WordPress was the asker referring to? There are significant differences.</summary>
   <author>
      <name>Timothy Appnel</name>
      <uri>http://appnel.com/</uri>
   </author>
   
   <category term="confusion" label="confusion" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="linkedin" label="LinkedIn" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="marketing" label="marketing" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="naming" label="naming" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="typepad" label="TypePad" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="wordpress" label="WordPress" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://appnel.com/code/">
      &lt;p&gt;For the past few weeks I&amp;#8217;ve been monitoring &lt;a href="http://www.linkedin.com/answers?categoryHome=&amp;amp;category=TCH_BLG"&gt;the blogging questions on LinkedIn&lt;/a&gt; out of curiosity. In that time I&amp;#8217;ve seen questions that asked for advice on TypePad vs. WordPress that received confused answers. Which WordPress was the asker referring to? There are significant differences.&lt;/p&gt;

&lt;p&gt;WordPress.COM and TypePad is a fair comparison because they are both hosted blogging systems. WordPress.ORG is the open source software that you can download and install on your servers. With the source code you can modify it to your heart&amp;#8217;s desire and use plugins etc. So if you are referring to WordPress.ORG then Movable Type is a more relevant then TypePad. &lt;/p&gt;

&lt;p&gt;While this confusion is &lt;a href="http://foolswisdom.com/movable-type-200-open-source/"&gt;easily cleared&lt;/a&gt; it is still lost on most people. The WordPresses share the same name, but in many, but not all, respects are different things.&lt;/p&gt;

&lt;p&gt;This could have been easily avoided if WordPress.COM would have been named something else. After all, TypePad began as a fork of the MT code and still shares some parts today. Given the popularity of Movable Type then (and still now), Ben and Mena could have chosen to name that service Movable Type. I&amp;#8217;m thankful they didn&amp;#8217;t.&lt;/p&gt;

      

   &lt;img src="http://feeds.feedburner.com/~r/AppnelSolutions/~4/273212284" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://appnel.com/code/log/2008/04/meet-the-wordpresses</feedburner:origLink></entry>

<entry>
   <title>Go, Blog It! Go!</title>
   <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/AppnelSolutions/~3/272360160/go-blog-it-go" />
   <id>tag:appnel.com,2008:/code//1.632</id>
   
   <published>2008-04-17T18:41:59Z</published>
   <updated>2008-04-17T18:52:16Z</updated>
   
   <summary>Six Apart continues to break down the walls around social communities.
</summary>
   <author>
      <name>Timothy Appnel</name>
      <uri>http://appnel.com/</uri>
   </author>
   
   <category term="blogit" label="blog it" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="facebook" label="facebook" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="opensocial" label="opensocial" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="typepad" label="typepad" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://appnel.com/code/">
      &lt;p&gt;Six Apart continues to break down the walls around social communities.&lt;/p&gt;

&lt;p&gt;Yesterday Six Apart announced the availability of a Facebook application (yes you read that correctly) called &lt;a href="http://www.sixapart.com/about/news/2008/04/bringing_bloggi.html"&gt;Blog It&lt;/a&gt;. The TypePad-powered service enables Facebook users to make posts in Facebook out to any number of blogging tools.&lt;/p&gt;

&lt;p&gt;Here are a couple of links covering it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.blogherald.com/2008/04/16/six-apart-launches-blog-it-a-cross-platform-blogging-application-for-facebook/"&gt;Six Apart launches Blog It, a cross-platform blogging application for Facebook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.wired.com/monkeybites/2008/04/six-apart-launc.html"&gt;Six Apart&amp;#8217;s &amp;#8216;Blog It&amp;#8217; Turns Facebook Into a Fire Hose&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Six Apart CEO Chris Alden wrote up a good summary on his blog &lt;a href="http://www.r21.org/2008/04/blog_it.html"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Of course, there are &lt;a href="http://webworkerdaily.com/2008/04/17/blog-it-has-a-way-to-go/"&gt;those who are less than impressed&lt;/a&gt; or &lt;a href="http://mashable.com/2008/04/15/blogit/#comment-1031575"&gt;dismiss it as irrelevant&lt;/a&gt;, but then again Six Apart acknowledged there are shortcomings that they will be addressing. After all, this is a 1.0 release&lt;/p&gt;

&lt;p&gt;I think it&amp;#8217;s still pretty slick though.&lt;/p&gt;

      

   &lt;img src="http://feeds.feedburner.com/~r/AppnelSolutions/~4/272360160" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://appnel.com/code/log/2008/04/go-blog-it-go</feedburner:origLink></entry>

<entry>
   <title>Our Man Arvind </title>
   <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/AppnelSolutions/~3/271735627/our-man-arvind" />
   <id>tag:appnel.com,2008:/code//1.631</id>
   
   <published>2008-04-16T21:56:44Z</published>
   <updated>2008-04-16T22:01:10Z</updated>
   
   <summary>Our man Arvind Satyanarayan has started authoring a weekly column each Monday for Blog Herald summarizing the weekly happenings in the MT community.</summary>
   <author>
      <name>Timothy Appnel</name>
      <uri>http://appnel.com/</uri>
   </author>
   
   <category term="arvind" label="Arvind" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="blogherald" label="Blog Herald" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="news" label="news" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="publications" label="publications" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://appnel.com/code/">
      &lt;p&gt;Keeping up to date on the latest MT community news and happenings is easier then ever.  &lt;/p&gt;

&lt;p&gt;Our man &lt;a href="http://www.movalog.com/"&gt;Arvind Satyanarayan&lt;/a&gt; has started authoring a weekly column for &lt;a href="http://www.blogherald.com/"&gt;Blog Herald&lt;/a&gt; summarizing the weekly happenings in the MT community. His first two posts are already up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.blogherald.com/2008/04/09/movable-type-weekly-news-wrapup/"&gt;April 9th: Movable Type Weekly News Wrapup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.blogherald.com/2008/04/14/movable-type-monday-considering-security-and-beta-test-updates/"&gt;April 14th: Movable Type Monday: Considering Security and Beta Test Updates&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;New posts are to be published every Monday, hence &amp;#8220;Movable Type Monday.&amp;#8221; &lt;/p&gt;

&lt;p&gt;Now if we could only get a feed dedicated to his posts.&lt;/p&gt;

&lt;p&gt;BTW: When I say &amp;#8220;our&amp;#8221; I&amp;#8217;m speaking as a member of the MT community. Arvind doesn&amp;#8217;t work for Appnel Solutions. &lt;/p&gt;

      

   &lt;img src="http://feeds.feedburner.com/~r/AppnelSolutions/~4/271735627" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://appnel.com/code/log/2008/04/our-man-arvind</feedburner:origLink></entry>

<entry>
   <title>Oh Wow! Persistent Storage for Amazon EC2 Announced</title>
   <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/AppnelSolutions/~3/270079949/persistent-storage-for-ec2-announced" />
   <id>tag:appnel.com,2008:/code//1.630</id>
   
   <published>2008-04-14T15:44:09Z</published>
   <updated>2008-04-14T16:44:20Z</updated>
   
   <summary>Amazon announces beta functionality that will address the biggest hassle for using EC2 servers for running web applications -- a file system that won't vanish if an instance stops running.</summary>
   <author>
      <name>Timothy Appnel</name>
      <uri>http://appnel.com/</uri>
   </author>
   
   <category term="amazon" label="amazon" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="ec2" label="ec2" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="s3" label="s3" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="storage" label="storage" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://appnel.com/code/">
      &lt;p&gt;Amazon announces beta functionality that will address the biggest hassle for using EC2 servers for running web applications &amp;#8212; a file system that won&amp;#8217;t vanish if an instance stops running. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://aws.typepad.com/aws/2008/04/block-to-the-fu.html"&gt;Chief Evangelist Jeff Barr explains the issue the Amazon Web Services Blog&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;If you have taken a close look at Amazon EC2, you know that the instances are ephemeral. The instances have anywhere from 160 GB to 1.7 TB of attached storage. The storage is there as long as the instance is running, but of course it disappears as soon as the instance is shut down. Applications with a need for persistent storage could store data in Amazon S3 or in Amazon SimpleDB, but they couldn&amp;#8217;t readily access either one as if it was an actual file system.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For my experience and those of others, instances expectedly shutting down has been rare so far, the possibility of catastrophic proportions was real. If an instance were to unexpected shut down it would be the equivalent of a traditional server&amp;#8217;s drive array catching on fire &amp;#8212; the data would be lost forever unless you had a very good backup system in place.&lt;/p&gt;

&lt;p&gt;This shortcoming was acceptable in that EC2 was created for computing power and not general usage hosting, but that&amp;#8217;s not what a lot of
people wanted to do &amp;#8212; many wanted to run web apps with SQL databases and other things. &lt;/p&gt;

&lt;p&gt;So the ability to hosts sites or applications or run a SQL database server using EC2 instances was possible the onus has been on everyone using an instance to run file and database backups or even (multiple) replicated database servers even if high availability wasn&amp;#8217;t a
requirement so data wouldn&amp;#8217;t be lost in the event of a failure.&lt;/p&gt;

&lt;p&gt;Later Barr continues:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&amp;#8230;our forthcoming persistent storage feature will give you the ability to create reliable, persistent storage volumes for use with EC2. Once created, these volumes will be part of your account and will have a lifetime independent of any particular EC2 instance.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In addition to being able to create and then mount these volumes of persistent storage from any EC2 instance, Amazon will be releasing functionality that will take snapshots (backups) of volumes and store it in your S3 account.&lt;/p&gt;

&lt;p&gt;I also assume that you can mount these persistent storage volumes from multiple EC2 instances.&lt;/p&gt;

&lt;p&gt;This is addition is simply huge because it makes Amazon a viable hosting option for web applications by eliminating the biggest technical hurdles. With this shift from compute to more general purpose server resources, I think a seismic shift is certain for how web applications are developed and deployed and Amazon is poised to win big.&lt;/p&gt;

      

   &lt;img src="http://feeds.feedburner.com/~r/AppnelSolutions/~4/270079949" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://appnel.com/code/log/2008/04/persistent-storage-for-ec2-announced</feedburner:origLink></entry>

<entry>
   <title>Recognition!</title>
   <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/AppnelSolutions/~3/259249640/recognition" />
   <id>tag:appnel.com,2008:/code//1.625</id>
   
   <published>2008-03-27T21:19:00Z</published>
   <updated>2008-03-27T22:21:25Z</updated>
   
   <summary>There are times when I think I'm talking to myself in what I think. Perhaps I could be mistaken.</summary>
   <author>
      <name>Timothy Appnel</name>
      <uri>http://appnel.com/</uri>
   </author>
   
   <category term="community" label="community" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="cpan" label="CPAN" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="licensing" label="licensing" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="mtos" label="MTOS" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="opensource" label="open source" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://appnel.com/code/">
      &lt;p&gt;Serdar Yegulalp picked up on my &lt;a href="http://appnel.com/code/log/2008/02/not-just-a-license"&gt;Open Source Is Not Just a License&lt;/a&gt; post and highlighted it in &lt;a href="http://www.informationweek.com/blog/main/archives/2008/03/its_not_just_a.html"&gt;a post to his Information Week blog&lt;/a&gt;. He writes:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;There is indeed a great deal to gain by contributing, and while many people might sniff at the fact that at least some of it is PR (as Tim put it), it&amp;#8217;s easy to forget that PR is a crucial ingredient in the glue that holds together a community.  A person with a bad reputation as a fair player is less likely to be welcomed into any community; someone who has a track record of playing fairly &amp;#8212; or at least attempting to play more fairly &amp;#8212; will be welcomed and will be able to reap the benefits all the more enthusiastically.  You tend to give more when you know you&amp;#8217;ll get more in return.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;He goes on: &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;What Tim means by open source not just being a license is reflected in all of this.  Anyone can write and release something under an open source license &amp;#8212; yes, even Microsoft &amp;#8212; but that doesn&amp;#8217;t mean they&amp;#8217;ll be used, re-used, built on or well-respected.  That takes time and engagement, and a sense that you need to give as good as you get.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There are times when I think I&amp;#8217;m talking to myself in what I think. Perhaps I could be mistaken.&lt;/p&gt;

      

   &lt;img src="http://feeds.feedburner.com/~r/AppnelSolutions/~4/259249640" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://appnel.com/code/log/2008/03/recognition</feedburner:origLink></entry>

<entry>
   <title>Concatenated Indexes for MT</title>
   <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/AppnelSolutions/~3/254318434/concatenated-indexes-for-mt" />
   <id>tag:appnel.com,2008:/code//1.624</id>
   
   <published>2008-03-19T14:17:08Z</published>
   <updated>2008-03-19T14:18:57Z</updated>
   
   <summary>This is a "wonky" sort of thing, but it will be great for performance and a prime example of the good work being done to improve the overall performance of MT in the next official release or two.</summary>
   <author>
      <name>Timothy Appnel</name>
      <uri>http://appnel.com/</uri>
   </author>
   
   <category term="database" label="database" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="mtos" label="mtos" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="optimization" label="optimization" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="performance" label="performance" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://appnel.com/code/">
      &lt;p&gt;Watching to stream of commits to the MTOS repository I noticed one that intrigued me &amp;#8212; &lt;a href="http://www.pcmag.com/encyclopedia_term/0,2542,t=concatenated+index&amp;amp;i=40206,00.asp"&gt;concatenated indexes&lt;/a&gt; in MT objects. I asked and Brad Choate obliged me with &lt;a href="http://www.sixapart.com/pipermail/mtos-dev/2008-March/000821.html"&gt;an answer&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Prior to MT 4.1, the MT object schema never supported the declaration of concatenated indexes. Meaning, creating an index on two or more columns. Now that we can declare these, we&amp;#8217;re making use of them, since it makes a big difference for the larger MT installations. So yes, it is significant, if you have lots of blogs with lots of entries.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is a &amp;#8220;wonky&amp;#8221; sort of thing, but it will be great for performance and a prime example of the good work being done to improve the overall performance of MT in the next official release or two.&lt;/p&gt;

      

   &lt;img src="http://feeds.feedburner.com/~r/AppnelSolutions/~4/254318434" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://appnel.com/code/log/2008/03/concatenated-indexes-for-mt</feedburner:origLink></entry>

<entry>
   <title>Being Competitive is "Dirty"</title>
   <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/AppnelSolutions/~3/249722088/being-competitive-is-dirty" />
   <id>tag:appnel.com,2008:/code//1.623</id>
   
   <published>2008-03-11T20:14:36Z</published>
   <updated>2008-03-11T20:18:56Z</updated>
   
   <summary>It would seem that Automattic is not up to dealing with competitive heat yet.</summary>
   <author>
      <name>Timothy Appnel</name>
      <uri>http://appnel.com/</uri>
   </author>
   
   <category term="comparison" label="comparison" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="competition" label="competition" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="professionalism" label="professionalism" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="wordpress" label="WordPress" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://appnel.com/code/">
      &lt;p&gt;Anil Dash made &lt;a href="http://www.movabletype.com/blog/2008/03/a-wordpress-25-upgrade-guide.html"&gt;a very interesting post&lt;/a&gt; noting the pending release of WordPress 2.5 and suggests users consider Movable Type since upgrading means breaking a lot of things. &lt;a href="http://www.techcrunch.com/2008/03/11/six-apart-takes-aim-at-wordpress-users-wordpress-pissed/"&gt;As TechCrunch notes&lt;/a&gt; the WordPress crowd (&lt;a href="http://automattic.com/"&gt;Automattic&lt;/a&gt; really) is &amp;#8220;pissed&amp;#8221; with Matt Mullenweg calling it &amp;#8220;desperate and dirty.&amp;#8221; This of course is &lt;a href="http://en.wikipedia.org/wiki/Pot_calling_the_kettle_black"&gt;the pot calling the kettle black&lt;/a&gt; if it were true, but it&amp;#8217;s not. Dash&amp;#8217;s arguments are, to my knowledge, factually correct, quite logical and polite. To me it&amp;#8217;s just a company being competitive in professional way. It would seem that Automattic is not up to dealing with with that sort of heat yet.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m not at all surprised by their reaction though. The WP community lead by the Automattic staff has dished out a lot of crap over the years at Six Apart&amp;#8217;s expense without the professionalism that Dash extended them with this one post. I don&amp;#8217;t doubt Automattic&amp;#8217;s dedication to open source or what they do, but, given past behavior, I&amp;#8217;ve always questioned their ability to conduct themselves in a way that professional and enterprise customers demand. This reaction only supports that observation and only makes me rest easier as enterprise consultant specializing in Movable Type systems.&lt;/p&gt;

      

   &lt;img src="http://feeds.feedburner.com/~r/AppnelSolutions/~4/249722088" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://appnel.com/code/log/2008/03/being-competitive-is-dirty</feedburner:origLink></entry>

<entry>
   <title>Isolating Performance Issues</title>
   <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/AppnelSolutions/~3/246901328/isolating-performance-issues" />
   <id>tag:appnel.com,2008:/code//1.622</id>
   
   <published>2008-03-06T18:17:05Z</published>
   <updated>2008-03-06T02:41:10Z</updated>
   
   <summary>"It just goes to show how difficult to isolate performance issues are."</summary>
   <author>
      <name>Timothy Appnel</name>
      <uri>http://appnel.com/</uri>
   </author>
   
   <category term="debugging" label="debugging" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="innodb" label="InnoDB" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="mysql" label="MySQL" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="performance" label="performance" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://appnel.com/code/">
      &lt;p&gt;Over on the mtos-dev mailing list, &lt;a href="http://www.sixapart.com/pipermail/mtos-dev/2008-March/000745.html"&gt;David Jacobs notes&lt;/a&gt; a post from one of the &lt;a href="http://tumblr.com/"&gt;Tumblr&lt;/a&gt; developers about &lt;a href="http://tumblelog.marco.org/post/28044316"&gt;a bug in MySQL&amp;#8217;s InnoDB engine severely impacting peformance&lt;/a&gt; and goes on to say:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;It just goes to show how difficult to isolate performance issues are. In addition to the web server, templates, third party plugins, etc. Sometimes you hit an unforeseen bug in something completely external.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;True. &lt;/p&gt;

&lt;p&gt;We&amp;#8217;ve been discussing performance on the list a lot on mtos-dev since it&amp;#8217;s &lt;a href="http://appnel.com/code/log/2008/02/mt42-the-performance-optimization-release"&gt;the primary focus of MT 4.2&lt;/a&gt;. Web applications of any complexity are exponentially more complex than the desktop software I started writing at the start of my career. Web applications like MT are made of dozens of individual pieces of software with different developers, milestones and objectives. The number of combinations and configurations are virtually infinite and in constant change that testing and debugging issues is quite a challenge. It&amp;#8217;s the price we pay for the distributed nature of the Internet where so many small pieces are loosely joined.&lt;/p&gt;

      

   &lt;img src="http://feeds.feedburner.com/~r/AppnelSolutions/~4/246901328" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://appnel.com/code/log/2008/03/isolating-performance-issues</feedburner:origLink></entry>

<entry>
   <title>The Value of Clean Code</title>
   <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/AppnelSolutions/~3/246472586/the-value-of-clean-code" />
   <id>tag:appnel.com,2008:/code//1.621</id>
   
   <published>2008-03-06T01:32:56Z</published>
   <updated>2008-03-06T02:05:31Z</updated>
   
   <summary>Chromatic says "Consistent code requires much less brainpower to decipher its structure, leaving that much more brainpower to find real problems." I whole-heartedly agree.</summary>
   <author>
      <name>Timothy Appnel</name>
      <uri>http://appnel.com/</uri>
   </author>
   
   <category term="bestpractices" label="best practices" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="code" label="code" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="debugging" label="debugging" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="development" label="development" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="perlcritic" label="Perl::Critic" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="perltidy" label="perltidy" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://appnel.com/code/">
      &lt;p&gt;In an O'Reilly LAMP blog post, &lt;a href="http://www.oreillynet.com/onlamp/blog/2008/02/clean_code_is_easier_to_debug.html"&gt;"Clean Code is Easier to Debug"&lt;/a&gt;, chromatic writes:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Consistent code requires much less brainpower to decipher its structure, leaving that much more brainpower to find real problems.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I have found this to be quite true and encourage any developer to give it a try. Since I've been paying more attention to how clean my code is I've found that not only can track down issues faster, but that I can refresh my memory of how a piece of code works faster.&lt;/p&gt;

&lt;p&gt;"I don't have time for that though Tim," you might say. It doesn't take as much time and effort as you'd think.&lt;/p&gt;

      &lt;p&gt;The tool that I found most useful and to have the biggest impact on helping keep my code clean and consistent is &lt;a href="http://search.cpan.org/dist/Perl-Tidy/"&gt;perltidy&lt;/a&gt;. I use it on every piece of Perl code I touch -- and often. I've even gone so far as to use it on other's code when I'm having a hard time reading through it. For instance, there was a time when I'd run all of MT through, its improved a fair bit lately, it so I could figure out how to make us of it. (Documentation should do that, but we're not going there in this post.)&lt;/p&gt;

&lt;p&gt;Try it. Here is the perltidy configuration file that I use.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;-ce     # cuddle-else
-lp     # line up with parentheses
-syn    # check syntax
-sfs    # space for semicolon
-bar    # open brace always on right
-nbbb   # no blanks before blocks
-pt=2   # Parens tightness (tightest)
-bt=2   # braces tightness (tightest)
-sbt=2  # square brackets tightness (tighest)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can customize how perltidy formats your code ad naseum. These are just my preferences.&lt;/p&gt;

&lt;p&gt;Funny thing I noticed after using perltidy for a bit is that I started to write my code differently so it looked even cleaner once perltidy finished its work.&lt;/p&gt;

&lt;p&gt;So while perltidy will make your code consistent and in a sense clean, that's not all there is to it. Clean code also means making code legible and well organized. &lt;/p&gt;

&lt;p&gt;For instance, once put through the eye of perltidy I stopped writing long lines of code -- especially nested statements. So, I'd take a line like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;my $count_iter = $class-&amp;gt;count_group_by({
    'asset' eq lc $type ? () :
        (status =&amp;gt; MT::Entry::RELEASE()),
    %$terms,
    },{
    group =&amp;gt; ['objecttag_tag_id'],
    'join' =&amp;gt; MT::ObjectTag-&amp;gt;join_on('object_id', { object_datasource =&amp;gt; $class-&amp;gt;datasource, %$terms }, $args),
    'asset' eq lc $type ? (no_class =&amp;gt; 1) : (),
    %$args
});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note this is one &lt;em&gt;lloooong&lt;/em&gt; line of code that takes time to dissect in order to understand everything it's doing. I found that my code was quicker and easier to read, understand and debug if I rewrote the same logic using smaller statements.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;my $t = %$terms;
my $a = %args;
if ('asset' eq lc $type) {
    $t-&amp;gt;{status}   = MT::Entry::RELEASE();
    $a-&amp;gt;{no_class} = 1;
}
$a-&amp;gt;{group} = ['objecttag_tag_id'];
my $jt = {object_datasource =&amp;gt; $class-&amp;gt;datasource, %$terms};
my $join = MT::ObjectTag-&amp;gt;join_on('object_id', $jt, $args);
my $count_iter = $class-&amp;gt;count_group_by($t, $a);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Another benefit of this approach is that error messages are more accurate in pinpointing where the issue lies. In the first example, any error would be reported as the same line.&lt;/p&gt;

&lt;p&gt;Another thing I started doing more was grouping variable assignments and declarations as much as possible. I found that practice made it quicker to find where and what you are assigning to a variable in a large block and its just neater with all those equal signs. (Yes like I once heard &lt;a href="http://timaoutloud.org/2005/08/oscon-wrap-up"&gt;David Heinemeier Hansson say&lt;/a&gt;, "Call me shallow. I love beautiful code.")&lt;/p&gt;

&lt;p&gt;There are a lot of little things you can do to make your code cleaner and more consistent. These are just two ways of many mostly smaller ones I've built in to my style.&lt;/p&gt;

&lt;p&gt;If you are interested in learning more ways to write cleaner code I suggest checking out &lt;a href="http://amazon.com/o/ASIN/0596001738/tima02-20"&gt;Damian Conway's Perl Best Practices&lt;/a&gt;. I don't agree with every practice that he evangelizes and some seem a bit over the top, but overall it's pretty good food for thought.&lt;/p&gt;

&lt;p&gt;Incidentally many of the coding best practices from the book have been codified in &lt;a href="http://search.cpan.org/dist/Perl-Critic/"&gt;Perl::Critic&lt;/a&gt;, a module that critiques perl source code issues warnings and errors based on the configured options. It has an extensible framework that has been used by many other CPAN developers to create many more policies. There are even modules for &lt;a href="http://search.cpan.org/dist/Test-Perl-Critic/"&gt;testing for Perl::Critic&lt;/a&gt; and &lt;a href="http://search.cpan.org/dist/Test-PerlTidy/"&gt;testing perltidy&lt;/a&gt; compliance while running your testing suite. &lt;/p&gt;

&lt;p&gt;Though I have every intention, I've yet to give Perl::Critic a try on my code nor have I worked both in to my standard test suite. &lt;/p&gt;

&lt;p&gt;There is always room for improvement.&lt;/p&gt;

   &lt;img src="http://feeds.feedburner.com/~r/AppnelSolutions/~4/246472586" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://appnel.com/code/log/2008/03/the-value-of-clean-code</feedburner:origLink></entry>

<entry>
   <title>On Testing</title>
   <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/AppnelSolutions/~3/242902645/on-testing" />
   <id>tag:appnel.com,2008:/code//1.620</id>
   
   <published>2008-02-28T19:37:14Z</published>
   <updated>2008-03-06T02:15:03Z</updated>
   
   <summary>"My advice would be to factor your code such that the code is separated into a testable module."</summary>
   <author>
      <name>Timothy Appnel</name>
      <uri>http://appnel.com/</uri>
   </author>
   
   <category term="bestpractices" label="best practices" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="development" label="development" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="testing" label="testing" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://appnel.com/code/">
      &lt;p&gt;&lt;a href="http://www.mail-archive.com/cgiapp@lists.erlbaum.net/msg06522.html"&gt;A recent thread on the cgi-app mailing list&lt;/a&gt; discussed testing that is really worth noting.&lt;/p&gt;

&lt;p&gt;The key statement came from &lt;a href="http://search.cpan.org/~purdy/"&gt;Jason Purdy&lt;/a&gt; when he &lt;a href="http://www.mail-archive.com/cgiapp@lists.erlbaum.net/msg06523.html"&gt;said&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;My advice would be to factor your code such that the code is separated into a testable module.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I admit to being slow to developing tests for my work once I did I came to realize that this statement above to be very true. Once writing tests where introduce in to my development process it changed how I wrote the code, not only to make writing tests easier and more thorough, but for the betterment of the code. &lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve yet to break the habit of writing code and then the tests. (Testing advocates suggest you write tests upfront.) This one has been harder for me because often start from existing code, experimenting and capturing ideas that slowly gets molded into working code. On a few occasions I had a written a piece of code before I realized I was doing it.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m strange though and this is not an argument or excuse to follow good form.&lt;/p&gt;

      &lt;p&gt;&lt;a href="http://pubpages.unh.edu/~wfc/"&gt;Bill Costa&lt;/a&gt; &lt;a href="http://www.mail-archive.com/cgiapp@lists.erlbaum.net/msg06524.html"&gt;concurs and expands&lt;/a&gt; on Jason&amp;#8217;s statement:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This is excellent advice.  Try and write your &amp;#8216;back end&amp;#8217; modules so that a browser is not needed to exercise them. Then for testing you write a simple script that can be executed from the command line to fully test all of the services provided by your module.  It then becomes a much simpler matter to create a test script that probes all of the expected operations as well as the boundary conditions and even pathological cases.  In other words, don&amp;#8217;t assume that service will always be given sane data from the front end. Test for possible inputs that &amp;#8220;should never happen&amp;#8221;.&lt;/p&gt;
  
  &lt;p&gt;The book cited earlier will help you write those command line test scripts in a very efficient manner using well established and vetted test harness modules.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&amp;#8220;The book&amp;#8221; here is &lt;a href="http://amazon.com/o/ASIN/0596100922/tima02-20"&gt;Perl Testing: A Developer&amp;#8217;s Notebook by Ian Langworth and chromatic&lt;/a&gt;. Like others in the thread, I recommend it if you really want to learn about testing in Perl.&lt;/p&gt;

&lt;p&gt;Bill continued:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;An added benefit to this approach is, when you later have to make a change to one of these modules, you can run your tester to make sure you didn&amp;#8217;t accidentally break something else in the process.&lt;/p&gt;
  
  &lt;p&gt;In this way testing the final app itself should be more about usability testing with humans rather than actually trying to test the correct functioning of lower level functions through the app&amp;#8217;s web interface.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agreed. It&amp;#8217;s an ideal that all developers should aspire to achieve. It&amp;#8217;s easier said then done, but I do believe it pays dividends the closer you get to this ideal.&lt;/p&gt;

&lt;p&gt;After starting to write tests for my CPAN modules I decided that I wanted something for my MT plugins &amp;#8212; especially the big and involved ones like &lt;a href="http://appnel.com/code/feeds-app"&gt;Feeds.App&lt;/a&gt; and &lt;a href="http://appnel.com/code/tags-app"&gt;Tags.App&lt;/a&gt;. I ended up creating &lt;a href="http://code.google.com/p/mt-test/"&gt;my own testing framework for MT&lt;/a&gt; that has a lot of room for improvement, but works pretty well and gets the job done. The framework was written for MT3 systems and then quickly hacked to support both MT3 and MT4. It&amp;#8217;s available under the Artistic License like Perl. Contributions are always welcome.&lt;/p&gt;

   &lt;img src="http://feeds.feedburner.com/~r/AppnelSolutions/~4/242902645" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://appnel.com/code/log/2008/02/on-testing</feedburner:origLink></entry>

</feed>
