<?xml version="1.0" encoding="utf-8" ?>

<rdf:RDF 
	 xmlns:enc='http://purl.oclc.org/net/rss_2.0/enc#'

   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns="http://my.netscape.com/rdf/simple/0.9/">
<channel>
    <title>Lot 49: Greg Beaver's blog</title>
    <link>http://greg.chiaraquartet.net/</link>
    <description>Music, Computers, and all things Greg Beaver</description>
    <dc:language>en</dc:language>

    

    <items>
      <rdf:Seq>
        <rdf:li resource="http://greg.chiaraquartet.net/archives/207-guid.html" />
        <rdf:li resource="http://greg.chiaraquartet.net/archives/206-guid.html" />
        <rdf:li resource="http://greg.chiaraquartet.net/archives/205-guid.html" />
        <rdf:li resource="http://greg.chiaraquartet.net/archives/204-guid.html" />
        <rdf:li resource="http://greg.chiaraquartet.net/archives/203-guid.html" />
        <rdf:li resource="http://greg.chiaraquartet.net/archives/202-guid.html" />
        <rdf:li resource="http://greg.chiaraquartet.net/archives/201-guid.html" />
        <rdf:li resource="http://greg.chiaraquartet.net/archives/200-guid.html" />
        <rdf:li resource="http://greg.chiaraquartet.net/archives/199-guid.html" />
        <rdf:li resource="http://greg.chiaraquartet.net/archives/198-guid.html" />
        <rdf:li resource="http://greg.chiaraquartet.net/archives/196-guid.html" />
        <rdf:li resource="http://greg.chiaraquartet.net/archives/195-guid.html" />
        <rdf:li resource="http://greg.chiaraquartet.net/archives/194-guid.html" />
        <rdf:li resource="http://greg.chiaraquartet.net/archives/193-guid.html" />
        <rdf:li resource="http://greg.chiaraquartet.net/archives/192-guid.html" />
      </rdf:Seq>
    </items>
</channel>




<item rdf:about="http://greg.chiaraquartet.net/archives/207-guid.html">
    <title>PHP Advent, xUnit testing with phpt</title>
    <link>http://greg.chiaraquartet.net/archives/207-PHP-Advent,-xUnit-testing-with-phpt.html</link>
    <description>
    &lt;p&gt;Yesterday, the article I wrote for PHP Advent went live at &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=711&amp;amp;entry_id=207&quot; title=&quot;http://phpadvent.org/2009/testing-with-phpt-and-xunit-by-greg-beaver&quot;  onmouseover=&quot;window.status=&#039;http://phpadvent.org/2009/testing-with-phpt-and-xunit-by-greg-beaver&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;http://phpadvent.org/2009/testing-with-phpt-and-xunit-by-greg-beaver&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is a simple, and potentially controversial article about what makes a good testing framework, and an alternative to PHPUnit for PHP users.&amp;#160; If you have any feedback, feel free to post comments here. &lt;br /&gt;&lt;/p&gt; 
    </description>

    <dc:publisher>Lot 49: Greg Beaver's blog</dc:publisher>
    <dc:creator>nospam@example.com (Greg Beaver)</dc:creator>
    <dc:subject>
    PHP, </dc:subject>
    <dc:date>2009-12-10T18:13:00Z</dc:date>
    <wfw:comment>http://greg.chiaraquartet.net/wfwcomment.php?cid=207</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://greg.chiaraquartet.net/rss.php?version=1.0&amp;type=comments&amp;cid=207</wfw:commentRss>
    
    
</item>
<item rdf:about="http://greg.chiaraquartet.net/archives/206-guid.html">
    <title>How to put the FAIL in open source</title>
    <link>http://greg.chiaraquartet.net/archives/206-How-to-put-the-FAIL-in-open-source.html</link>
    <description>
    &lt;p&gt;There has been a bit of buzz about the new PHP standards working group (self-named) that has started work on a real cross-framework standard for the naming of classes and namespaces in PHP.&amp;#160; The idea is a wonderful one, and at first things looked like they were nothing but good.&amp;#160; A group of framework developers met at php|tek, whipped up a quick draft, and after returning home, started a new mailing list, &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=706&amp;amp;entry_id=206&quot; title=&quot;http://news.php.net/php.standards&quot;  onmouseover=&quot;window.status=&#039;http://news.php.net/php.standards&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;http://news.php.net/php.standards&lt;/a&gt; to discuss finalizing the draft discussed at php|tek.&lt;/p&gt; 
&lt;p&gt;At this point, signs of trouble began to crop up, and the good intentions began to result in a chill on the openness with suggestions of &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=707&amp;amp;entry_id=206&quot; title=&quot;http://news.php.net/php.standards/19&quot;  onmouseover=&quot;window.status=&#039;http://news.php.net/php.standards/19&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;reducing input through moderation&lt;/a&gt; and discussions of who was a &amp;quot;member&amp;quot; of the standards group.&amp;#160; None other than Rasmus made a &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=708&amp;amp;entry_id=206&quot; title=&quot;http://news.php.net/php.standards/29&quot;  onmouseover=&quot;window.status=&#039;http://news.php.net/php.standards/29&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;plea for more openness&lt;/a&gt;, which was answered by a resounding &amp;quot;no thanks&amp;quot; with the creation of the moderated &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=709&amp;amp;entry_id=206&quot; title=&quot;http://groups.google.com/group/php-standards&quot;  onmouseover=&quot;window.status=&#039;http://groups.google.com/group/php-standards&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;php-standards group&lt;/a&gt; at groups.google.com.&lt;/p&gt; 
&lt;p&gt;Since then, I have made several pleas, off-list and some on, to open the discussion and move things back to the way open source and specifically PHP works.&amp;#160; The reasoning is simple: open source thrives on contributions from all levels of hierarchy, not just a chosen few people who have developed prestige and karma by working on large-scale popular frameworks.&amp;#160; You don&#039;t have to take my word for it.&amp;#160; Immediately after the creation of the list, many non-members found immediate flaws in the standard, some of which were fixed, and many which were ignored and are now causing trouble on the moderated list.&amp;#160; This, ironically, is what led to the moderated list.&amp;#160; All I can conclude is that the people who came up with the standard actually are actively seeking a way to avoid valid input.&amp;#160; Harsh?&amp;#160; Perhaps.&amp;#160; Let&#039;s take a look at a recent thread:&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=710&amp;amp;entry_id=206&quot; title=&quot;http://groups.google.com/group/php-standards/browse_thread/thread/5b85ca398ba90289&quot;  onmouseover=&quot;window.status=&#039;http://groups.google.com/group/php-standards/browse_thread/thread/5b85ca398ba90289&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;http://groups.google.com/group/php-standards/browse_thread/thread/5b85ca398ba90289&lt;/a&gt; epitomizes the closed nature of the standard.&amp;#160; I find it appalling.&lt;/p&gt;
&lt;p&gt;If you feel strongly that we need a standard, and want one that will actually be useful, you need to contact the people in the projects and demand that they open the process, or it will not happen, and the standard that they come up with will be hobbled by the lack of openness.&amp;#160; Nothing is worse than a standard that lacks a mandate and the legitimacy of being both open and well thought-out.&amp;#160; Make your voice heard!&lt;br /&gt;&lt;/p&gt; 
    </description>

    <dc:publisher>Lot 49: Greg Beaver's blog</dc:publisher>
    <dc:creator>nospam@example.com (Greg Beaver)</dc:creator>
    <dc:subject>
    PHP, </dc:subject>
    <dc:date>2009-11-17T14:44:21Z</dc:date>
    <wfw:comment>http://greg.chiaraquartet.net/wfwcomment.php?cid=206</wfw:comment>
        <slash:comments>22</slash:comments>
        <wfw:commentRss>http://greg.chiaraquartet.net/rss.php?version=1.0&amp;type=comments&amp;cid=206</wfw:commentRss>
    
    
</item>
<item rdf:about="http://greg.chiaraquartet.net/archives/205-guid.html">
    <title>Transporting a cello: buy a seat? check it? Definitive answers on how to fly with a cello</title>
    <link>http://greg.chiaraquartet.net/archives/205-Transporting-a-cello-buy-a-seat-check-it-Definitive-answers-on-how-to-fly-with-a-cello.html</link>
    <description>
    &lt;p&gt;One of the perennial problems of travelling with a cello is how to transport it.&amp;#160; I have been flying with my cello since 1993, and have many experiences with both checking the instrument and with buying a seat for it.&amp;#160; This post will answer those burning questions of what to do to transport your instrument safely from one point to another.&amp;#160; First, let&#039;s start with the only guaranteed unsuccessful strategy I have encountered:&lt;/p&gt; 
&lt;h2&gt;Don&#039;t mail your cello&lt;/h2&gt; 
&lt;p&gt; Although large shops such as Shar can marshall the resources to ship instruments, they do so in very different circumstances from what you will be able to do on your own.&amp;#160; The few people I know who have shipped their instruments wound up with multi-hundred to thousand dollar repair bills, which was actually a lucky position to be in.&amp;#160; The risk of outright destruction is too great.&lt;/p&gt; 
&lt;h2&gt;When to check a cello?&lt;/h2&gt; 
&lt;p&gt;If your instrument is not a very valuable instrument that can be easily replaced if it is utterly destroyed, then it is probably unwise to buy a seat for the instrument.&amp;#160; The hassles of buying a seat are going to outweigh the benefits, I guarantee it.&lt;/p&gt; 
&lt;h2&gt;When not to check a cello?&lt;/h2&gt; 
&lt;p&gt;If your cello is very fine, very valuable, or very difficult to replace with an equivalent instrument either in the value that insurance will pay for it, or in any price range, then you should not check your cello.&amp;#160; Here are a list of things that can and have gone wrong with both flight cases and regular luggage:&lt;/p&gt; 
&lt;ol&gt; 
&lt;li&gt;lost luggage - permanently lost luggage happens more often than you would think&lt;/li&gt; 
&lt;li&gt;destroyed luggage - this speaks for itself, no?&lt;/li&gt; 
&lt;li&gt;a destroyed instrument inside a pristine, undamaged case&lt;/li&gt; 
&lt;li&gt;delayed luggage stored outside in sub-zero temperatures overnight&lt;/li&gt; 
&lt;li&gt;if you&#039;re counting on being able to carry the instrument on board because it will fit into the overhead, be aware that the airline can change the type of aircraft with no notice&lt;br /&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;The last point should be enough to dissuade even the most confident traveler from checking a valuable cello.&amp;#160; If you have a flight that transfers, and your flight is canceled due to weather, airlines very rarely allow you to retrieve luggage from the secured area, and it sits in un-climate controlled storage areas for the entire night.&amp;#160; This will render a cello to be far more fragile, and if you survive the night without a heart attack from the stress, your broken cello upon retrieval due to its extra fragility from exposure to the elements will push you over the edge.&lt;/p&gt; 
&lt;h2&gt;OK, I&#039;m going to check my cello, what do I need to know?&lt;/h2&gt;&lt;br /&gt; &lt;br /&gt;&lt;a href=&quot;http://greg.chiaraquartet.net/archives/205-Transporting-a-cello-buy-a-seat-check-it-Definitive-answers-on-how-to-fly-with-a-cello.html#extended&quot;&gt;Continue reading &quot;Transporting a cello: buy a seat? check it? Definitive answers on how to fly with a cello&quot;&lt;/a&gt;
    </description>

    <dc:publisher>Lot 49: Greg Beaver's blog</dc:publisher>
    <dc:creator>nospam@example.com (Greg Beaver)</dc:creator>
    <dc:subject>
    Music, </dc:subject>
    <dc:date>2009-09-20T05:17:00Z</dc:date>
    <wfw:comment>http://greg.chiaraquartet.net/wfwcomment.php?cid=205</wfw:comment>
        <slash:comments>8</slash:comments>
        <wfw:commentRss>http://greg.chiaraquartet.net/rss.php?version=1.0&amp;type=comments&amp;cid=205</wfw:commentRss>
    
    
</item>
<item rdf:about="http://greg.chiaraquartet.net/archives/204-guid.html">
    <title>Gearing up for a first Beethoven cycle</title>
    <link>http://greg.chiaraquartet.net/archives/204-Gearing-up-for-a-first-Beethoven-cycle.html</link>
    <description>
    &lt;p&gt;
This year, beginning in December, the Chiara Quartet will undertake our first Beethoven cycle.&amp;#160; This comes a year or two before we had planned to do it, but we were offered the chance by Music in Deerfield in Massachusetts, and a quick survey of our repertoire proved that it would be more than possible, as we already have more than half of the quartets solidly in our repertoire.&amp;#160; After little juggling of logistics, we committed to 3 concerts this season, starting in December, and 3 next season.&amp;#160; We will also be performing the complete cycle in Cambridge, MA at Harvard, and in Lincoln, Nebraska as part of our inaugural Chiara String Quartet concert series at the University of Nebraska-Lincoln.&lt;/p&gt; 
&lt;p&gt;Once we had the dates in place, the first big question is what order to play them in.&amp;#160; Our ordering is as follows:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Concert 1:&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Op. 135 in F Major&lt;br /&gt;Op. 18 No. 4 in C Minor&lt;br /&gt;Op. 59 No. 1 in F Major&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Concert 2:&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;Op. 18 No. 3 in D Major&lt;br /&gt;Op. 132 in A Minor&lt;br /&gt;Op. 59 No. 3 in C Major&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Concert 3:&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Op. 18 No. 1 in F Major&lt;br /&gt;Op. 95 in F Minor&lt;br /&gt;Op. 127 in E Flat Major&lt;/p&gt; 
&lt;p&gt;and the following season:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Concert 4:&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;Op. 18 No. 5 in A Major&lt;br /&gt;Op. 59 No. 2 in E Minor&lt;br /&gt;Op. 130 (with revised finale) in B Flat Major&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Concert 5:&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Op. 74 in E Flat Major&lt;br /&gt;Op. 18 No. 2 in G Major&lt;br /&gt;Op. 131 in C Sharp Minor&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Concert 6:&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Op. 18 No. 6 in B Flat Major&lt;br /&gt;Op. 130 (with Grosse Fuge) in B Flat Major&lt;/p&gt; 
&lt;p&gt;There are several obvious choices going on in this ordering.&amp;#160; First is that most concerts contain a quartet from each of the three periods of Beethoven&#039;s life. A late quartet sits in every possible concert slot, as does a middle quartet.&amp;#160; We will play Op. 130 twice in its entirety with the two possible finales, and the entire cycle ends with the Grosse Fuge.&amp;#160; Putting together this order also splits up the pieces we don&#039;t yet have in our repertoire between the two seasons.&amp;#160; Most concerts mix up major and minor keys as well.&lt;/p&gt;
&lt;p&gt;How, you might ask, does one prepare for such a collosal undertaking?&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;The majority of our preparation for this cycle predates the initial request for us to play one.&amp;#160; We&#039;ve been a full-time professional quartet since 2000, and so this will coincide with our 10th season.&amp;#160; Individually, we&#039;ve played a ton of chamber music, and a lot of Beethoven as part of that.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;I first heard a Beethoven cycle live when I was 10 years old, and the Juilliard Quartet performed one at the Wharton Center in East Lansing, Michigan.&amp;#160; I had only been playing the cello for 3 years, and so my memory consists of the opening chords of Op. 127, and the hairy legs of the quartet members peeping out between their socks and tuxedo pantlegs.&amp;#160; What?&amp;#160; I was 10 years old, give me a break.&amp;#160; If you haven&#039;t heard the Op. 127, its opening is one of the most memorable things Beethoven wrote, so you must come hear us play it live in our final concert this spring.&amp;#160; Becca&#039;s father was in the Concord Quartet and she literally grew up listening to live Beethoven cycles.&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;One of the first quartets I played in the &amp;quot;Shürtzaut&amp;quot; quartet (a group of 4 13-year old boys who refused to tuck in their shirts) was the second movement of Op. 18 No. 4, and this was one of the pieces that I played under the coaching of Rostislav Dubinsky of Borodin Quartet fame the following year in his Quadro-quartet at IU String Academy.&amp;#160; When the Chiara Quartet was formed at Musicorda in 1993, we played Op. 95 and had a chance to play the second movement with Arnold Steinhardt in his masterclass when our original violinist Rachel was sick.&amp;#160; The following year, we coached Op. 59 No. 2 very intensely with Norman Fischer of Concord Quartet fame (and soon to be my teacher at Rice University).&amp;#160; That same year, a group of students decided to practice the late quartets for a week and then to read through them.&amp;#160; While at Rice, Jonah and I learned Op. 59 No. 1 with Paul Katz of Cleveland Quartet fame as our coach.&amp;#160; At Tanglewood in 1999, I played Op. 127 with a group that coached with both Robert Mann and Raphael Hillyer of Juilliard Quartet fame, and this was one of the pieces with which the Chiara Quartet made our Alice Tully debut in 2005.&amp;#160; Op. 59 No. 3 was one of the pieces with which we made our Carnegie Hall debut the following year, and one of the pieces that helped us win a prize at the Borciani Competition the same year.&amp;#160; Op. 18 No. 3 was one of the pieces we played in the year we won first at the Fischoff Competition.&amp;#160; While graduate students at Juilliard, Jonah, Becca, Anna Elashvili and I played the Op. 130 with the Grosse Fuge on her graduation recital after coaching with Robert Mann.&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;Even with a list this long, the preparation for a cycle is more than just learning the quartets.&amp;#160; I played all of the sonatas and variations for cello in 2000 in New York (and will repeat the performance of all the sonatas this year).&amp;#160; Julie, Noori and I have been listening to Richard Goode&#039;s recording of all the piano sonatas, and in my orchestral days, I played all of the symphonies except for Number 8.&amp;#160; We&#039;ve read biographies of Beethoven, looked at actual manuscripts at Beethovenhaus in Bonn as well as facsimiles online, and heard cycle recordings by the Juilliard, Emerson, Takacs, and many recordings by the Concord, Cleveland, Tokyo as well as performances by Brentano, Borromeo, Biava, Miro, Pacifica and other quartets I&#039;m sure I&#039;m forgetting, as well as student performances of many of the works.&lt;/p&gt; 
&lt;p&gt;We are extremely excited to embark on this monumental journey and hope that you will join us in the first performance at Harvard on Wednesday, December 2 in Paine Hall, or at Smith College in Northampton on Saturday December 5 in Sweeney Concert Hall on the Music in Deerfield chamber music series.&amp;#160; If you&#039;re in Nebraska, you can hear us threepeat the performance on Sunday, December 13 in the Sheldon Art Gallery at 7:30 PM&lt;br /&gt;&lt;/p&gt; 
    </description>

    <dc:publisher>Lot 49: Greg Beaver's blog</dc:publisher>
    <dc:creator>nospam@example.com (Greg Beaver)</dc:creator>
    <dc:subject>
    Chiara Quartet, </dc:subject>
    <dc:date>2009-09-19T05:13:03Z</dc:date>
    <wfw:comment>http://greg.chiaraquartet.net/wfwcomment.php?cid=204</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://greg.chiaraquartet.net/rss.php?version=1.0&amp;type=comments&amp;cid=204</wfw:commentRss>
    
    
</item>
<item rdf:about="http://greg.chiaraquartet.net/archives/203-guid.html">
    <title>Redesigning the blog the lazy way</title>
    <link>http://greg.chiaraquartet.net/archives/203-Redesigning-the-blog-the-lazy-way.html</link>
    <description>
    After several years with the old template, I decided it was time to upgrade, and am trying out this new template.&amp;#160; It squishes the entries quite a bit more than the old one, but has a nicer look/feel.&amp;#160; Let me know if you like/dislike it. 
    </description>

    <dc:publisher>Lot 49: Greg Beaver's blog</dc:publisher>
    <dc:creator>nospam@example.com (Greg Beaver)</dc:creator>
    <dc:subject>
    General, </dc:subject>
    <dc:date>2009-09-19T05:04:52Z</dc:date>
    <wfw:comment>http://greg.chiaraquartet.net/wfwcomment.php?cid=203</wfw:comment>
        <slash:comments>4</slash:comments>
        <wfw:commentRss>http://greg.chiaraquartet.net/rss.php?version=1.0&amp;type=comments&amp;cid=203</wfw:commentRss>
    
    
</item>
<item rdf:about="http://greg.chiaraquartet.net/archives/202-guid.html">
    <title>Why health care reform is doomed in the United States</title>
    <link>http://greg.chiaraquartet.net/archives/202-Why-health-care-reform-is-doomed-in-the-United-States.html</link>
    <description>
    
&lt;p&gt;I recently remarked on my facebook status that health care reform was doomed in the current intellectual climate, and urged those reading to prove me wrong.  Unfortunately, I don&#039;t see any evidence that I was wrong yet, perhaps the president&#039;s speech on Wednesday will change that view, but I am not holding my breath.  There are three excellent articles that capture the essence of my skepticism.  Together, they are a whopping 15 pages of prose (that&#039;s a lot for news articles).  Basically, I have seen three prevailing views on health care reform amongst my friends and my facebook friends:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;We have an obligation to fix the system, support universal health insurance coverage (i.e. support the various Democratic proposals)&lt;/li&gt;
&lt;li&gt;You&#039;re crazy to believe that government-run health care is anything other than an IRS agent with a scalpel and the efficiency of the post office, plus it&#039;s a violation of privacy rights to turn over health care to the government.
&lt;/li&gt;
&lt;li&gt;market-based reforms are the only logical choice (i.e. tax credits for buying insurance, or insurance exchanges, or co-ops, etc.)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Note that I did not include in that list anything about the crazies, because none of my friends are insane. At least not the kind of insanity as represented by &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=701&amp;amp;entry_id=202&quot; title=&quot;http://www.thedailyshow.com/watch/wed-august-19-2009/barney-frank-s-town-hall-snaps&quot;  onmouseover=&quot;window.status=&#039;http://www.thedailyshow.com/watch/wed-august-19-2009/barney-frank-s-town-hall-snaps&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Jon Stewart&#039;s answer to Barney Frank&#039;s question to a constituent at his town hall meeting&lt;/a&gt; &amp;quot;On what planet do you spend most of your time?&amp;quot;  Stewart&#039;s answer: &amp;quot;apparently, a planet where a mixed race president and a gay Jew qualify as Nazis.&amp;quot;&lt;/p&gt;&lt;p&gt;No, my friends are rational, primarily college-educated, and mostly split between liberal-leaning musicians and conservative-leaning programmers (that split in itself is interesting to me, but is not relevant to this post).  Before I go any further, I should acknowledge that yes, I am a liberal-leaning musician.  In my own defense, I am liberal because of my life experiences.  I am good friends with someone who was formerly homeless, have been screwed by my health insurance companies, and have lived in poverty in a poor neighborhood, as well as benefiting directly from government student loans.  No, I am not a communist, thanks for asking though.&lt;/p&gt;&lt;p&gt;Why is health reform doomed?  Not because the crazies are dominating the dialogue, far from it.  It is not because the Democratic plan is too expensive, too invasive of privacy, or too government-focused and not enough market-focused.  It is because we are asking the wrong questions in order to solve this, and nobody (I&#039;m looking at you, Obama) is correcting us.&lt;/p&gt;&lt;p&gt;I have read large portions of both the contentious H.R. 3200 house bill, as well as nearly the entire H.R. 3400 (a little-known Republican bill that is popular amongst conservatives on facebook as a better way to reform health care).  There are some obvious problems in both.  Neither fully pays for itself (H.R. 3400 flat out doesn&#039;t provide any revenue in the bill, instead relying upon the hope that cutting costs will pay for it).  However, the flaws in both bills jump right off of the page when one examines this article by David Goldhill in the September 2009 issue of the Atlantic:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=698&amp;amp;entry_id=202&quot; title=&quot;http://www.theatlantic.com/doc/200909/health-care&quot;  onmouseover=&quot;window.status=&#039;http://www.theatlantic.com/doc/200909/health-care&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;http://www.theatlantic.com/doc/200909/health-care&lt;/a&gt;&lt;/p&gt;&lt;p&gt;To summarize the salient points, the health care system does not have any kind of market mechanisms to set prices in place, and this is a direct result of the introduction of comprehensive health insurance in 1954.  Unlike other forms of insurance (car insurance, for example), comprehensive insurance pays for the equivalent of oil changes, which both disguises the true cost and encourages severe inflation.&lt;/p&gt;&lt;p&gt;Thus, Goldhill concludes, the problem is not that not everyone has health insurance, it is that we don&#039;t pay for health care, our insurers do, and so we have no say in pricing.  He also goes on to recommend both mandatory health savings accounts to replace health insurance for predictable expenses such as checkups, the occasional equivalent of a fender-bender for health, and costs associated with aging (with some ideas for managing poverty thrown in), and a mandatory single-payer catastrophic insurance with premiums pinned to age with no other factor taken into account.&lt;/p&gt;&lt;p&gt;At this point, those in the &amp;quot;Obama, get your government out of my [fill-in-the-blank-here]&amp;quot; camp are thinking &amp;quot;single payer?  hell no.&amp;quot;  To you, I suggest reading this editorial:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=699&amp;amp;entry_id=202&quot; title=&quot;http://www.nytimes.com/2009/09/03/opinion/03kristof.html&quot;  onmouseover=&quot;window.status=&#039;http://www.nytimes.com/2009/09/03/opinion/03kristof.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;http://www.nytimes.com/2009/09/03/opinion/03kristof.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Again, to summarize: government runs several things &lt;b&gt;better&lt;/b&gt; than the privately managed things they replaced.  The examples in the article are fire departments, police departments, post offices, libraries, and health care (outside the U.S.).  I would limit this list to fire fighters and police departments: I doubt that even the most staunch conservative (again, the most staunch sane conservative) would argue that it would be better to outsource firefighting to for-profit corporations.  In fact, apparently &amp;quot;In New York City, according to accounts in The New York Times in the
1850s and 1860s, firefighting often descended into chaos, with
drunkenness and looting.&amp;quot;  Wow.&lt;/p&gt;&lt;p&gt;Now as for Goldhill&#039;s conclusion of how to solve the problems, there is a flaw in his reasoning as well.  To get at the core, we have to examine some of his assertions:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;The housing bubble offers some important lessons for health-care
policy. The claim that something—whether housing or health care—is an
undersupplied social good is commonly used to justify government
intervention, and policy makers have long striven to make housing more
affordable. But by making housing investments eligible for special tax
benefits and subsidized borrowing rates, the government has stimulated
not only the construction of more houses but also the willingness of
people to borrow and spend more on houses than they otherwise would
have. The result is now tragically clear.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;This paints a simple cause-and-effect picture that doesn&#039;t even begin to capture the problem.  His tidy explanation doesn&#039;t explain why lenders such as Wells Fargo singled out poor people illegally to net them into sub-prime loans, or why the market of derivatives caused what should have been a localized collapse to poison the entire economy.  He also states:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Accidentally, but relentlessly, America has built a health-care system
with incentives that inexorably generate terrible and perverse results.
Incentives that emphasize health &lt;i&gt;care&lt;/i&gt; over any other aspect of
health and well-being. That emphasize treatment over prevention. That
disguise true costs. That favor complexity, and discourage transparent
competition based on price or quality. That result in a generational
pyramid scheme rather than sustainable financing. And that—most
important—&lt;b&gt;remove consumers from our irreplaceable role as the ultimate
ensurer of value&lt;/b&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;I don&#039;t doubt that pretty much everyone agrees with the description of how health care pricing works.  The part that I want to emphasize is in bold (my emphasis, not Goldhill&#039;s)  In the previous sentence, Goldhill uses this language to describe the doctors/insurers: &amp;quot;They all want to serve patients well. But they also all behave
rationally in response to the economic incentives those distortions
create.&amp;quot;&lt;/p&gt;&lt;p&gt;This language reflects a world view of a businessman who has faith in the power of the free market.  Under ordinary circumstances, this is the right view, our history shows that markets very often set the best price, and everyone wins.  Unfortunately, the so-called Great Recession we are currently in did not result, as Goldhill seems to be claiming, from people making rational decisions, and markets do not solve all problems.  Put on your reading glasses, this next article is the long one:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=700&amp;amp;entry_id=202&quot; title=&quot;http://www.nytimes.com/2009/09/06/magazine/06Economic-t.html&quot;  onmouseover=&quot;window.status=&#039;http://www.nytimes.com/2009/09/06/magazine/06Economic-t.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;http://www.nytimes.com/2009/09/06/magazine/06Economic-t.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This article by Nobel-prize winning economist Paul Krugman is by the guy one could argue is the smartest of the three whose articles I&#039;ve quoted.  Although you absolutely must read the whole article - especially if you have &amp;quot;faith in the market&amp;quot; - I will try to summarize it:&lt;/p&gt;&lt;p&gt;You can&#039;t have 100% faith in the market because people are intrinsically irrational, and occasionally the government probably must play a role in stabilizing a market before it spirals into a depression.  In short: Keynesian economics was more right than the stuff we&#039;ve been using to set public policy since the 1970s.&lt;/p&gt;&lt;p&gt;The solution Goldhill proposes for controlling health care costs makes an assumption that people will rationally choose the best price for health care, and bases this assertion upon evidence in fields such as Lasik vision correction, which has had a price drop as the rest of health care prices have skyrocketed.  This is a compelling argument, and one I believe is a very good one, but it is flawed for handling all kinds of health care.&lt;/p&gt;&lt;p&gt;People who are under physical or emotional stress very rarely make rational decisions, and when you are having severe chest pains, you are going to do whatever the doctor tells you to do.  If the doc says get angioplasty, you get it.  If the doc says we&#039;re going to open up the chest right now, you do it.  Very few people will whip out the &amp;quot;could I see your competitor&#039;s prices?&amp;quot; line while clutching their chests in pain.  Put simply, emergency care cannot be rationally priced by the consumers of the care.  Perhaps emergency care simply cannot have a free market to set prices.  This greatly complicates the issue unless one simply decides that the catastrophic insurance would have to cover certain emergency procedures with a deductible, much like what we have now (those of us with insurance, of course).&lt;/p&gt;&lt;p&gt;The non-emergency care portion of health care would respond quite well to a free market, but I would question whether certain procedures wouldn&#039;t suffer from the effects of things like positional monopolies (really sick people can&#039;t travel to get lower prices).&lt;/p&gt;&lt;p&gt;A bigger flaw is that there is no way to transition from our current system into the new one without horribly disrupting health care for at least some people.  The potential for unintended consequences is horrendous, and this will be impossible to navigate politically.&lt;/p&gt;&lt;p&gt;So what kind of questions should we be asking?  For one, how can we transform our comprehensive health insurance system into one that does is not comprehensive?  After changing this, how do we provide a safety net for people who get too sick to work, for people who are too poor to pay premiums or contributes to HSAs?  How can we use government to manage the market breakdowns that will occur with our irrational behavior in things like emergency health care pricing in a market-based health care economy?&lt;/p&gt;&lt;p&gt;As long as the question being asked is simply &amp;quot;How do we provide the existing insurance to everyone?&amp;quot; health care reform doesn&#039;t stand a chance.&lt;/p&gt;&lt;p /&gt; 
    </description>

    <dc:publisher>Lot 49: Greg Beaver's blog</dc:publisher>
    <dc:creator>nospam@example.com (Greg Beaver)</dc:creator>
    <dc:subject>
    Politics, </dc:subject>
    <dc:date>2009-09-05T05:36:16Z</dc:date>
    <wfw:comment>http://greg.chiaraquartet.net/wfwcomment.php?cid=202</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://greg.chiaraquartet.net/rss.php?version=1.0&amp;type=comments&amp;cid=202</wfw:commentRss>
    
    
</item>
<item rdf:about="http://greg.chiaraquartet.net/archives/201-guid.html">
    <title>How to manage all that noise?  Where PHP development and chamber music rehearsal meet</title>
    <link>http://greg.chiaraquartet.net/archives/201-How-to-manage-all-that-noise-Where-PHP-development-and-chamber-music-rehearsal-meet.html</link>
    <description>
    
&lt;p&gt;Lately, there have been many well-intentioned but I would contend misguided ideas proposed to handle noise on public programmer mailing lists.  The premise is that in fact there are very important messages being drowned out in a chorus of irrelevant messages from ill-informed developers.  Warnings of inefficiencies have been tossed about quite a bit as the curse of &amp;quot;bike shedding.&amp;quot;&lt;/p&gt;&lt;p&gt;To understand what they mean by &amp;quot;bike shedding,&amp;quot; one must know the bike shed parable.  Once upon a time, a group of people got together to build a nuclear reactor to power the city.  Everyone in the town said &amp;quot;great, we need more power,&amp;quot; and so they got to work designing the plant.  Everything was going great, the design of the reactor sailed by until one day, one of the citizens said &amp;quot;hey, let&#039;s build a bike shed for the workers so they don&#039;t have to come to work in cars and can get exercise.&amp;quot;  Everyone agreed until an argument broke out over whether to paint the shed blue or red.  Eventually, the whole process broke down, and the plant was never built because they couldn&#039;t choose a color to paint the bike shed.  The moral of the story: everyone agrees on the complex important things, but the process breaks down over arguments about irrelevant details.&lt;/p&gt;&lt;p&gt;I think we can all agree that this is a tragic parable, illustrating what happens when the process for decision-making breaks down.&lt;/p&gt;&lt;p&gt;When there is a problem of signal-to-noise ratio on a mailing list, the problem has to do with the process for accepting public input, I completely agree with this.  However, I am troubled by the implication that having unmoderated mailing lists is the intrinsic problem with open source that must be solved.  There is a crucial balance between rewarding quality and being open to the outsider that is the life blood of open source.  You could even think of it as the &amp;quot;affirmative action&amp;quot; of the programming world: we recognize that amateur programmers who do not come from the establishment of the temples of programming in academic computer science departments or even computing careers, may have ideas that are better than the most learned highest karma achiever.&lt;/p&gt;&lt;p&gt;For my musician reader: Open source thrives on meritocracy: the idea that those who can do junk have more influence than those who can&#039;t do as much junk.  Karma is the thing with which these individuals are rewarded.  Only those with karma are able to actually make changes to the source code.  It doesn&#039;t matter who you are, or what your background is, if you demonstrate good coding and community, you get karma.&lt;/p&gt;&lt;p&gt;String quartet rehearsal is similar, the best ideas get more weight regardless of whether the person who has them is playing the melody.&lt;/p&gt;&lt;p&gt;Why am I talking about string quartet rehearsal in a post about moderated programmer mailing lists?  I come from a profession (professional chamber music) where &amp;quot;karma&amp;quot; is a fluid object, and unlike the programming world tends to break down when we attempt to nail it down.  My string quartet has found that rather than try to decide who will be &amp;quot;the decider&amp;quot; for tough decisions, it&#039;s not just friendlier, but is also far more efficient to devote our individual energies to two essential things:&lt;/p&gt;&lt;p /&gt;&lt;ol&gt;&lt;li&gt;always try to find the bigger picture&lt;/li&gt;&lt;li&gt;always try to understand and respect everyone else&#039;s crackpot stupid ideas&lt;/li&gt;&lt;/ol&gt;&lt;p /&gt;&lt;p&gt;Sometimes they are crackpot, but most of the time, the reason they just seemed crackpot because they were outside the boundaries of our collective imaginations.&lt;/p&gt;&lt;p&gt;An example: in our first years together, we occasionally would get into endless arguments in my quartet about whether to play a particular musical section faster or slower (PHP developers: think endless namespace separator arguments).  After a long time of arguing about this, it usually turned out that we were asking the wrong question, until one day we would find the right question, which was something like &amp;quot;how long are the phrases?&amp;quot; (PHP developers: the right question turned out to be &amp;quot;how do we solve the ambiguity between static methods and namespaced functions?&amp;quot;).  After finding the right question, we stopped arguing nearly as much, and the music sounded much better after we all re-adjusted our thinking.&lt;/p&gt;&lt;p&gt;This illustrates an important distinction: the question of how fast to play was not an irrelevant &amp;quot;bike shedding&amp;quot; detail, it was a crucial part of the solution.  We still had to choose a speed to play, just as the nuclear power plant people still would need a place to put their bikes.  By changing the question from &amp;quot;How fast?&amp;quot; to &amp;quot;How long is the phrase?&amp;quot; we were actually solving the question of what color to paint the bike shed at the same time we solved the question of how to design access to the nuclear reactor, not ignoring it.&lt;/p&gt;&lt;p&gt;The best solution is for those with the most karma to use this power to redirect unfruitful arguments towards larger questions that can lead to a more natural solution to the problem, not to limit external input and even conflict.&lt;/p&gt;&lt;p&gt;Perhaps the principal designers of the ill-fated hypothetical nuclear power plant would have done better to instead suggest that the bike shed be integrated into the reactor building.  This would protect the bikes from the elements, and also require any bike thieves to go through security to get to the bikes - and eliminated the question of what color to paint the shed entirely without ignoring it.&lt;/p&gt;&lt;p&gt;It takes hard work and more than a little gut-wrenching conflict to resolve a truly important, difficult problem, and I for one, am willing to tolerate a little noise to find that gem which would otherwise be missed.&lt;/p&gt; 
    </description>

    <dc:publisher>Lot 49: Greg Beaver's blog</dc:publisher>
    <dc:creator>nospam@example.com (Greg Beaver)</dc:creator>
    <dc:subject>
    Music, PHP, </dc:subject>
    <dc:date>2009-06-29T00:54:34Z</dc:date>
    <wfw:comment>http://greg.chiaraquartet.net/wfwcomment.php?cid=201</wfw:comment>
        <slash:comments>2</slash:comments>
        <wfw:commentRss>http://greg.chiaraquartet.net/rss.php?version=1.0&amp;type=comments&amp;cid=201</wfw:commentRss>
    
    
</item>
<item rdf:about="http://greg.chiaraquartet.net/archives/200-guid.html">
    <title>code coverage reporting using PEAR, PEAR2, phar, and sqlite3</title>
    <link>http://greg.chiaraquartet.net/archives/200-code-coverage-reporting-using-PEAR,-PEAR2,-phar,-and-sqlite3.html</link>
    <description>
    
&lt;p&gt;I&#039;ve recently become enmeshed in developing Pyrus, PEAR&#039;s next generation installer (code coverage is moving up, 20% more coverage than my last blog post).  This blog post details my journey in making the process of verifying the correctness of the development via testing and code coverage smoother, exponentially faster and more robust as a result.&lt;/p&gt;&lt;p&gt;One of the problems I found when designing the new code for PEAR 1.4.0 (back in the day) was that it was very difficult to determine whether changes would break things.  The main problem revolves around the colossal size of the test suite.  Because of the complexity of some of the tests (they must download files from a fake internet and then install them into a fake registry and then verify it actually works), the suite takes between 15 and 35 minutes to run, depending on your hardware configuration and PHP version.&lt;/p&gt;&lt;p&gt;This is a real problem when trying to develop with any kind of flow.  If, after every change, one needs to sit through 35 minutes of tests, one will never develop anything of substance.  Thus, typically I ran a subset of the tests, develop quickly, and then do a run of the entire test suite to make sure there are no unintended breaks in the other code.  In addition, I had to simply assume that new tests I design actually execute the code in question, as it is not always possible to verify this directly in a passing or failing test.&lt;/p&gt;&lt;p&gt;The obvious solution here is to generate a code coverage report and go by that.  This, however, still does not fix the problem of accidentally not running tests that are affected by a change, and generating a code coverage report for the entire project is even more time consuming.&lt;/p&gt;&lt;p&gt;What to do?&lt;/p&gt;&lt;p&gt;There are a couple of solutions.  One is to set up a continuous integration server, and simply do minimal testing at home, and then commit-and-hope, fixing issues as they appear.  Although this is a process that is used at php.net very successfully (see &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=690&amp;amp;entry_id=200&quot; title=&quot;http://gcov.php.net&quot;  onmouseover=&quot;window.status=&#039;http://gcov.php.net&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;gcov.php.net&lt;/a&gt;), it doesn&#039;t fit my needs: I need to know right away whether I am testing the code I intend to test, and whether I am breaking anything else.&lt;/p&gt;&lt;p&gt;The solution I am toying with is a step beyond what &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=691&amp;amp;entry_id=200&quot; title=&quot;http://www.phpunit.de&quot;  onmouseover=&quot;window.status=&#039;http://www.phpunit.de&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHPUnit&lt;/a&gt; has to offer currently (yes I am aware of other testing frameworks, for all of you doubters out there, and have nothing against them except that I personally find my development to be more lithe with the &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=692&amp;amp;entry_id=200&quot; title=&quot;http://qa.php.net/write-test.php&quot;  onmouseover=&quot;window.status=&#039;http://qa.php.net/write-test.php&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;phpt&lt;/a&gt; test style).  PHPUnit offers &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=693&amp;amp;entry_id=200&quot; title=&quot;http://www.phpunit.de/manual/3.4/en/code-coverage-analysis.html&quot;  onmouseover=&quot;window.status=&#039;http://www.phpunit.de/manual/3.4/en/code-coverage-analysis.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;xdebug code coverage reports&lt;/a&gt;, and an option to do some fancy logging, to xml and to a database.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=694&amp;amp;entry_id=200&quot; title=&quot;http://pear.php.net/PEAR&quot;  onmouseover=&quot;window.status=&#039;http://pear.php.net/PEAR&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PEAR&lt;/a&gt;&#039;s run-tests command offers xdebug code coverage raw data, saved as a &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=695&amp;amp;entry_id=200&quot; title=&quot;http://php.net/var_export&quot;  onmouseover=&quot;window.status=&#039;http://php.net/var_export&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;var_export&lt;/a&gt;()ed array, but no reporting.  PHP&#039;s buit-in run-tests.php runner for phpt tests does not offer xdebug code coverage at all.&lt;/p&gt;&lt;p&gt;Neither of these solves the problems I mentioned above.  What I dream of is a program that can automatically determine what files - test suites or code - have been modified, and automatically run tests that are affected by the changes, and then create a coverage report that I can view instantly.&lt;/p&gt;&lt;p&gt;Well, the dream is now a reality.  Using a combination of the old and new, it is now possible to do near-instantaneous super-targeted test execution and instant code coverage reporting.&lt;/p&gt;&lt;p&gt;There are 4 simple steps and 1 bigger step involved in making this a reality:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;install PHP 5.3 or newer from either the recent RC2 (or stable release, if you&#039;re reading this in the future) or from CVS&lt;/li&gt;&lt;li&gt;install PEAR 1.8.0 or newer&lt;/li&gt;&lt;li&gt;svn checkout http://svn.pear.php.net/PEAR2/all&lt;/li&gt;&lt;li&gt;copy all/Pyrus_Developer/src/Pyrus/Developer/CoverageAnalyzer/pear2coverage.phar.php to a web directory&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Once you have done these four, you need to grab test-modified.php from &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=696&amp;amp;entry_id=200&quot; title=&quot;http://cvs.php.net/viewvc.cgi/pear-core/test-modified.php?view=co&amp;amp;revision=1.4&amp;amp;content-type=text%2Fplain&quot;  onmouseover=&quot;window.status=&#039;http://cvs.php.net/viewvc.cgi/pear-core/test-modified.php?view=co&amp;amp;revision=1.4&amp;amp;content-type=text%2Fplain&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;http://cvs.php.net/viewvc.cgi/pear-core/test-modified.php?view=co&amp;amp;revision=1.4&amp;amp;content-type=text%2Fplain&lt;/a&gt; and change the paths for $codepath and $testpath to point at the project you are testing.&lt;/p&gt;&lt;p&gt;Next, run test-modified.php --norender.  This will run the phpt tests, and create a pear2coverage.db sqlite3 database in the tests directory.&lt;/p&gt;&lt;p&gt;Finally, browse to pear2coverage.phar.php in your browser, enter the /full/path/to/pear2coverage.db and voila - a fully working instant coverage report.&lt;/p&gt;&lt;p&gt;This setup is the most involved part.  As you develop, when you&#039;re ready to run tests, simply re-run php test-modified.php --norender, and the tests will be re-run, re-processed, and you will have a full coverage report available within about a minute&#039;s time.&lt;/p&gt;&lt;p&gt;I&#039;ve been using this to develop Pyrus (located in your all checkout at all/Pyrus), and it&#039;s been great.&lt;/p&gt;&lt;p&gt;I have plans to examine the feasibility of processing the XML files that PHPUnit outputs, as this would allow generating coverage reports from phpunit-based tests as well.  Unfortunately, I&#039;m not sure the database format PHPUnit supports is simple enough to work for my needs, as it has much more detail (such as which classes/methods are declared in files), in order to support more abstract coverage reporting.  Thus, I&#039;m not likely to add support for that into this coverage reporter, unless I can be convinced otherwise.&lt;/p&gt;&lt;p&gt;This also demonstrates the phar extension&#039;s power.  The web application is entirely contained within a phar archive, but web requests can be made for individual files directly, thus the generated html requests a .css file from within the phar, and it is served up by ext/phar with the correct mime type without any additional programming.&lt;/p&gt;&lt;p&gt;It&#039;s an exciting time to be developing in PHP, if you ask me.&lt;/p&gt;&lt;br /&gt;&lt;p /&gt; 
    </description>

    <dc:publisher>Lot 49: Greg Beaver's blog</dc:publisher>
    <dc:creator>nospam@example.com (Greg Beaver)</dc:creator>
    <dc:subject>
    PHP, </dc:subject>
    <dc:date>2009-04-14T00:10:53Z</dc:date>
    <wfw:comment>http://greg.chiaraquartet.net/wfwcomment.php?cid=200</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://greg.chiaraquartet.net/rss.php?version=1.0&amp;type=comments&amp;cid=200</wfw:commentRss>
    
    
</item>
<item rdf:about="http://greg.chiaraquartet.net/archives/199-guid.html">
    <title>Pyrus, PEAR2 and web code coverage report for phpt-based tests</title>
    <link>http://greg.chiaraquartet.net/archives/199-Pyrus,-PEAR2-and-web-code-coverage-report-for-phpt-based-tests.html</link>
    <description>
    
&lt;p&gt;It&#039;s been a while since I reported on any of my PHP activities, and this update is long overdue.  I must apologize to Davey for not doing my 7 things, and to all of the facebook people for whom I didn&#039;t write 25 things.  I am somehow not at all motivated to do this...&lt;/p&gt;&lt;p&gt;In any case, now that work on ext/phar has shifted primarily to maintenance mode, and namespaces are finally ancient history, I&#039;ve shifted all of my coding energy to getting Pyrus, PEAR&#039;s next-generation installer, ready to ship.  Pyrus is basically the PEAR installer completely redesigned for PHP 5.3, and it takes advantage of as many of PHP&#039;s new bells and whistles as makes sense.  Some of the exciting features:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Full support for .tar, .tgz, .tbz, .zip, and .phar archive formats out of the box, complete with signing via md5, sha1, sha256, sha512, or asymmetric true signature via openssl signature (all from ext/phar, which is built into PHP 5.3)&lt;/li&gt;&lt;li&gt;primary registry is SQLite3-based, which is much more robust, and can be relocated very easily, plus support for XML file-based registry as well as PEAR 1.x&#039;s serialize-based registry&lt;/li&gt;&lt;li&gt;redundant registries means ability to reconstruct a corrupted install&lt;/li&gt;&lt;li&gt;configuration is stored with the installed files, no more hunting down errant config files, user preferences are stored in home directory or equivalent&lt;/li&gt;&lt;li&gt;for developers: easy generation of package.xml straight from source code checkout&lt;/li&gt;&lt;li&gt;also for developer: easy generation of channel REST files directly from release tarball, no need to install a package (like the old Chiara_PEAR_Server) or even run PHP on the channel web server.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;There are many other great features for users who would like to extend Pyrus, including a seamless API for accessing package.xml which is identical regardless of whether the package.xml is from an .xml file, an archive, or an installed package&#039;s registry.&lt;/p&gt;&lt;p&gt;Of course, all of these features only matter if they work, and to move along that path, I&#039;ve been spending my time unit testing up a storm.  Using the run-tests command of the old PEAR installer, I&#039;m writing and refining tests.  With the addition of xdebug code coverage (pear run-tests -rx does the trick), it is possible to see where stuff is being executed.  Unfortunately, I don&#039;t like the existing reporting tools (call me a snob), so I whipped up a very simple coverage analyzer and popped it into the subversion where all of PEAR2 is stored.&lt;/p&gt;&lt;p&gt;When I say simple, I mean here is the script for generating the source (&lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=679&amp;amp;entry_id=199&quot; title=&quot;http://svn.pear.php.net/wsvn/PEARSVN/Pyrus_Developer/src/Pyrus/Developer/CoverageAnalyzer/?rev=0&amp;amp;sc=0&quot;  onmouseover=&quot;window.status=&#039;http://svn.pear.php.net/wsvn/PEARSVN/Pyrus_Developer/src/Pyrus/Developer/CoverageAnalyzer/?rev=0&amp;amp;sc=0&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;svn link&lt;/a&gt;):&lt;/p&gt;&lt;p&gt;&lt;div class=&quot;php&quot; style=&quot;text-align: left&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;namespace &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; __autoload&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$c&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #0000ff;&quot;&gt;$c&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/str_replace&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;PEAR2&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\P&lt;/span&gt;yrus&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\D&lt;/span&gt;eveloper&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\C&lt;/span&gt;overageAnalyzer&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\\&lt;/span&gt;&#039;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;&#039;&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$c&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #b1b100;&quot;&gt;include&lt;/span&gt; __DIR__ . &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;/&#039;&lt;/span&gt; . &lt;span style=&quot;color: #0000ff;&quot;&gt;$c&lt;/span&gt; . &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;.php&#039;&lt;/span&gt;;&lt;br /&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;namespace PEAR2\Pyrus\Developer\CoverageAnalyzer &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #0000ff;&quot;&gt;$a&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; Aggregator&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/realpath&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;realpath&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;../../../../../Pyrus/tests&#039;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;, &lt;a href=&quot;http://www.php.net/realpath&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;realpath&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;../../../../../Pyrus/src&#039;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/file_exists&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;file_exists&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;__DIR__ . &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;/test&#039;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;span style=&quot;color: #b1b100;&quot;&gt;foreach&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; DirectoryIterator&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;__DIR__ . &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;/test&#039;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;as&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$file&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$file&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;isDot&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;continue&lt;/span&gt;;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;a href=&quot;http://www.php.net/unlink&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;unlink&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$file&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;getPathName&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;a href=&quot;http://www.php.net/mkdir&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;mkdir&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;__DIR__ . &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;/test&#039;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #0000ff;&quot;&gt;$a&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;__DIR__ . &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;/test&#039;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;Highlighting is a little wonky because this is PHP 5.3+ code, but my blog is running 5.2.&lt;/p&gt;&lt;p&gt;The output is at &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=685&amp;amp;entry_id=199&quot; title=&quot;http://pear.php.net/~greg/coverage/&quot;  onmouseover=&quot;window.status=&#039;http://pear.php.net/~greg/coverage/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;http://pear.php.net/~greg/coverage/&lt;/a&gt;.  This is a dumbed-down version of &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=686&amp;amp;entry_id=199&quot; title=&quot;http://gcov.php.net&quot;  onmouseover=&quot;window.status=&#039;http://gcov.php.net&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;gcov.php.net&lt;/a&gt;, which I found extraordinarily helpful when writing the unit tests for ext/phar, but unlike gcov, there are some fantastically helpful features.  The short list:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;summary of all executed files and their coverage&lt;/li&gt;&lt;li&gt;project coverage (lines executed, lines covered, and the percentage of covered code)&lt;/li&gt;&lt;li&gt;annotated source showing the lines covered with hyperlinks to lists of tests that cover each line&lt;/li&gt;&lt;li&gt;this one excites me: per-test code coverage.&lt;/li&gt;&lt;/ol&gt;For instance, &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=687&amp;amp;entry_id=199&quot; title=&quot;http://pear.php.net/~greg/coverage/line-660-cov-@Pyrus@PackageFile@v2.php.html&quot;  onmouseover=&quot;window.status=&#039;http://pear.php.net/~greg/coverage/line-660-cov-@Pyrus@PackageFile@v2.php.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;this report&lt;/a&gt; shows the tests that execute line 660 of PackageFile/v2.php, &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=688&amp;amp;entry_id=199&quot; title=&quot;http://pear.php.net/~greg/coverage/test-@PackageFile_v2@basic@file.phpt.html&quot;  onmouseover=&quot;window.status=&#039;http://pear.php.net/~greg/coverage/test-@PackageFile_v2@basic@file.phpt.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;next this report&lt;/a&gt; shows the files that the PackageFile_v2/basic/file.phpt test actually executes with their proportional coverage, and &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=689&amp;amp;entry_id=199&quot; title=&quot;http://pear.php.net/~greg/coverage/cov-test--@Pyrus@PackageFile@v2.php.html&quot;  onmouseover=&quot;window.status=&#039;http://pear.php.net/~greg/coverage/cov-test--@Pyrus@PackageFile@v2.php.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;finally this report&lt;/a&gt; shows &lt;p&gt;the lines in PackageFile/v2.php that are executed by the file.phpt test.&lt;/p&gt;&lt;p&gt;This last part is extremely useful to me, I have already used it to determine when a test is not executing the lines I expect it should be, and to fix problems such as using isset() instead of array_key_exists(), which would otherwise be very difficult to track down.&lt;/p&gt;&lt;p&gt;As you can also see, only 30% of the source to Pyrus is covered by the current tests, and so there is a long ways to go to full coverage.  If any of this work interests you, feel free to contribute, PEAR2 has a much lower barrier to entry than PEAR, and as you can see, we need all the help we can get to bring this baby off the ground.&lt;/p&gt; 
    </description>

    <dc:publisher>Lot 49: Greg Beaver's blog</dc:publisher>
    <dc:creator>nospam@example.com (Greg Beaver)</dc:creator>
    <dc:subject>
    PEAR, </dc:subject>
    <dc:date>2009-02-14T22:55:29Z</dc:date>
    <wfw:comment>http://greg.chiaraquartet.net/wfwcomment.php?cid=199</wfw:comment>
        <slash:comments>6</slash:comments>
        <wfw:commentRss>http://greg.chiaraquartet.net/rss.php?version=1.0&amp;type=comments&amp;cid=199</wfw:commentRss>
    
    
</item>
<item rdf:about="http://greg.chiaraquartet.net/archives/198-guid.html">
    <title>Music, PEAR, phar, namespaces and Macs.  Oh my!</title>
    <link>http://greg.chiaraquartet.net/archives/198-Music,-PEAR,-phar,-namespaces-and-Macs.-Oh-my!.html</link>
    <description>
    
&lt;p&gt;Why the tri-partite title?  I&#039;ve been silent for a while on the blog, but the title sums up my life for the past several months.  What have I been doing?  Aside from some crazy music work learning a
blisteringly difficult Elliot Carter String Quartet No. 4 as well as
Steve Reich&#039;s Different Trains, Bartok&#039;s 6th Quartet, bringing back
Korngold 3rd Quartet, learning Carter&#039;s Figment for solo cello, and
performing Bach&#039;s 5th Suite for Unaccompanied Cello for the first time,
I&#039;ve also been pretty active in coding.  I acquired a new Macbook Pro with &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=662&amp;amp;entry_id=198&quot; title=&quot;http://www.vmware.com/products/fusion/&quot;  onmouseover=&quot;window.status=&#039;http://www.vmware.com/products/fusion/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;VMWare Fusion&lt;/a&gt; running Windows XP and Ubuntu, and it has made development super-easy.  I also put in a significant effort on the phone getting &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=663&amp;amp;entry_id=198&quot; title=&quot;http://www.barackobama.com/&quot;  onmouseover=&quot;window.status=&#039;http://www.barackobama.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Barack&lt;/a&gt; his electoral vote in the Omaha area, which seems to have paid off.  So, here&#039;s the long version of what I&#039;ve been doing.&lt;/p&gt;&lt;h3&gt;Music and Macs&lt;/h3&gt;&lt;h4&gt;first the music&lt;/h4&gt;&lt;p&gt;The past month has seen my time consumed learning &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=678&amp;amp;entry_id=198&quot; title=&quot;http://www.boosey.com/pages/cr/catalogue/cat_detail.asp?musicid=3563&quot;  onmouseover=&quot;window.status=&#039;http://www.boosey.com/pages/cr/catalogue/cat_detail.asp?musicid=3563&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Elliot Carter&#039;s 4th String Quartet&lt;/a&gt; for the &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=665&amp;amp;entry_id=198&quot; title=&quot;http://www.scena.org/blog/newswire/2008/10/nec-celebrates-elliott-carter-100th.html&quot;  onmouseover=&quot;window.status=&#039;http://www.scena.org/blog/newswire/2008/10/nec-celebrates-elliott-carter-100th.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;100th birthday thing&lt;/a&gt; in Boston.  Although I have not learned the others, a few veterans have reported that it is the most difficult.  I certainly found it to be the most difficult thing I&#039;ve ever learned by a long shot.  It took me almost 15 hours of work to be able to play the first page (only 15 measures of music) at 3/4 of the printed tempo, and the piece is 35 pages in the cello part.  To contrast, page 35 of the 10 Celebrated Mozart Quartet cello part is the third movement of &lt;b&gt;6th&lt;/b&gt; string quartet in the book.  Carter 4th&#039;s cello part is as long as 6 Mozart quartet cello parts.  However, it is shorter than some of the 4 page Mozart quartets, because it is frickin fast and there are lots and lots of notes.  It is the most holy s*** hard piece I&#039;ve ever learned, and for a while, I was scared it just wasn&#039;t going to be possible.&lt;/p&gt;&lt;p&gt;In addition, one of Carter&#039;s big compositional inventions is the &lt;i&gt;metric modulation&lt;/i&gt; in which a tempo change has a distinct rhythmic relationship.  He uses some pretty normal ones in the first movement (the 16th note becomes the new triplet), but the other movements have fun ones such as the 16th note becoming the new septuplet.  Because most of my part is written in septuplets, this can be difficult to do.  Speeding up septuplets so that you fit 7 into what used to be the space of 6 septuplets is not an easy thing to learn at all.&lt;/p&gt;&lt;h4&gt;...then the mac&lt;/h4&gt;&lt;p&gt;...unless you have a metronome that can do the metric modulation.  We had been using a web-based metronome to plug into our studio&#039;s stereo to rehearse, because it had a more pleasing beat than any of our metronomes have, and it occurred to me that I could probably pretty easily write a metronome that is capable of doing metric modulations on my new Macbook Pro.&lt;/p&gt;&lt;p&gt;So, I took it upon myself to learn &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=666&amp;amp;entry_id=198&quot; title=&quot;http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/chapter_1_section_1.html&quot;  onmouseover=&quot;window.status=&#039;http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/chapter_1_section_1.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Objective-C&lt;/a&gt; and the &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=667&amp;amp;entry_id=198&quot; title=&quot;http://developer.apple.com/cocoa/&quot;  onmouseover=&quot;window.status=&#039;http://developer.apple.com/cocoa/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Cocoa framework&lt;/a&gt; in Xcode to write a metronome.  It took me just over a day to learn Objective-C; it&#039;s very easy for a C coder to pick up, and the syntax is pretty simple.  Learning Cocoa fully took quite a bit longer, but after 3 days I had a working metronome that could do metric modulations (&lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=668&amp;amp;entry_id=198&quot; title=&quot;http://chiaraquartet.net/ChiaraMetronome1.0.0.dmg&quot;  onmouseover=&quot;window.status=&#039;http://chiaraquartet.net/ChiaraMetronome1.0.0.dmg&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;http://chiaraquartet.net/ChiaraMetronome1.0.0.dmg&lt;/a&gt;).  It had several flaws, not the least of which was the inability to insert a measure group, no way to save your work, and some odd behavior on the first beat (sometimes it is late and fast).&lt;/p&gt;&lt;p&gt;After a few more days of digging, I had figured out most of the quirks (and discovered bindings and Core Data, which simplified things) and had the interface greatly simplifed (&lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=669&amp;amp;entry_id=198&quot; title=&quot;http://chiaraquartet.net/ChiaraMetronome1.2.2.dmg&quot;  onmouseover=&quot;window.status=&#039;http://chiaraquartet.net/ChiaraMetronome1.2.2.dmg&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;http://chiaraquartet.net/ChiaraMetronome1.2.2.dmg&lt;/a&gt;).  I added the ability to start at any measure in the piece, and to have lead-in measures (which allow you to start the metronome, sit down, find the beat, and then start playing).&lt;/p&gt;&lt;p&gt;Then, I discovered document-based Core Data, which allowed saving files, resulting in the next generation (&lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=670&amp;amp;entry_id=198&quot; title=&quot;http://chiaraquartet.net/ChiaraMetronome2.0.0.dmg&quot;  onmouseover=&quot;window.status=&#039;http://chiaraquartet.net/ChiaraMetronome2.0.0.dmg&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;http://chiaraquartet.net/ChiaraMetronome2.0.0.dmg&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;Finally, not to leave an unturned stone, I added the final features, the ability to specify whether a beat is accented, beated or silent, which allows implementation of uneven compound meters (like 5/8), and the ability to accelerate or decelerate tempo, and we have the final version &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=671&amp;amp;entry_id=198&quot; title=&quot;http://chiaraquartet.net/ChiaraMetronome3.0.0.dmg&quot;  onmouseover=&quot;window.status=&#039;http://chiaraquartet.net/ChiaraMetronome3.0.0.dmg&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;http://chiaraquartet.net/ChiaraMetronome3.0.0.dmg&lt;/a&gt;.  This version contains 3 sample metronomes, the complete Elliot Carter 4th quartet we used to practice the tempo changes, a sample demonstrating accelerando/ritardando, and a sample demonstrating how the metronome can be used to practice complex polyrhythms like 6 against 7.&lt;/p&gt;&lt;p&gt;In my potentially humble opinion, the metronome is my crowning glory as a programmer, it is incredible for learning complex tempo relationships for composers like Carter and Bartok who call for it.  It&#039;s also important to note that this metronome should &lt;b&gt;NEVER&lt;/b&gt; be used for learning music by composers such as Brahms or Mozart.  If I hear of anyone using it for that, I will hunt you down and make you listen to Beethoven 9 with your eyelids peeled back watching &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=672&amp;amp;entry_id=198&quot; title=&quot;http://www.youtube.com/watch?v=kiaLOzP1lCA&quot;  onmouseover=&quot;window.status=&#039;http://www.youtube.com/watch?v=kiaLOzP1lCA&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Teletubbies&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Short feature list:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;free, released as a beta with no implied license or warranty.  I still own the copyright, so you can&#039;t use it in your own programming projects or sell it without infringing on the copyright.  You can use it for your own practicing, and I will eventually release the source under an open-source friendly license once I have time to research the options.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Please send me any metronome files you create, I&#039;ll start a public repository that people can download them from&lt;/b&gt;&lt;/li&gt;&lt;li&gt;requires Mac OS X Leopard (version 10.5.0) or newer&lt;/li&gt;&lt;li&gt;universal binary&lt;/li&gt;&lt;li&gt;relative tempo slider can be used to practice under tempo and click up the metronome, preserving tempo relationships at tempo changes&lt;/li&gt;&lt;li&gt;ability to program in endless tempo (0 bars) or a limited number of bars of a tempo&lt;/li&gt;&lt;li&gt;ability to do compound meters, both even and uneven&lt;/li&gt;&lt;li&gt;ability to do accelerando/ritardando, including ones that cross tempo group boundaries using the tempo calculator&lt;/li&gt;&lt;li&gt;ability to start and end accelerando/ritardando mid-bar.  No support for mid-beat start/stop, but this can be simulated by doubling the number of beats and making the mid-beats silent.  For example: instead of 4 beats at 60 bpm, choose 8 beats, and make 2,4,6 and 8 silent, with double the tempo, 120 bpm, then start the accel on beat 4 to start on the and of 2.&lt;/li&gt;&lt;li&gt;complete undo/redo support&lt;/li&gt;&lt;li&gt;ability to split up a tempo group, insert a new tempo group, or copy a set of tempo groups and paste them (copy button)&lt;/li&gt;&lt;li&gt;ability to play only a limited set of tempo groups, simply shift-click or command-click the tempo groups.  This can be used, for instance, to skip a repeat in practicing.&lt;/li&gt;&lt;li&gt;ability to accent all downbeats with a simple click.&lt;/li&gt;&lt;li&gt;start at any bar in the piece.&lt;/li&gt;&lt;li&gt;lead-in bars to help prepare tempo prior to playing.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;PEAR&lt;/h3&gt;&lt;p&gt;Today, I upgrade &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=673&amp;amp;entry_id=198&quot; title=&quot;http://pear.chiaraquartet.net&quot;  onmouseover=&quot;window.status=&#039;http://pear.chiaraquartet.net&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;pear.chiaraquartet.net&lt;/a&gt; to the latest version, 0.19.0, which Brett Bieber has been working hard to perfect.  The look is a bit cleaner, and I also replaced the defunct Crtx_Frontend_Chiara (or whatever it was called) with the newly minted Chiara_Pear_Server_Frontend_Web which is a direct port over of the old frontend with bugfixes and visual tweaks.&lt;/p&gt;&lt;h3&gt;PEAR and phar&lt;/h3&gt;&lt;p&gt;A high priority for PEAR is minting its next-generation installer, &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=674&amp;amp;entry_id=198&quot; title=&quot;http://svn.pear.php.net/wsvn/PEARSVN/Pyrus/?rev=0&amp;amp;sc=0&quot;  onmouseover=&quot;window.status=&#039;http://svn.pear.php.net/wsvn/PEARSVN/Pyrus/?rev=0&amp;amp;sc=0&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Pyrus&lt;/a&gt;.  Pyrus is based on PHP 5.3+, and thus I expended a tremendous amount of energy on the new &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=675&amp;amp;entry_id=198&quot; title=&quot;http://php.net/phar&quot;  onmouseover=&quot;window.status=&#039;http://php.net/phar&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;phar&lt;/a&gt; extension,which will be enabled by default in PHP 5.3.  The phar extension provides several must-have features for Pyrus:&lt;/p&gt;&lt;p /&gt;&lt;ol&gt;&lt;li&gt;ability to run out-of-the-box applications without installing or extracting them (a la Java&#039;s jar) in zip, tar or native phar file format&lt;/li&gt;&lt;li&gt;ability to create data archives in tar or zip format and convert between them&lt;/li&gt;&lt;li&gt;ability to automatically handle oddities of running an application inside an uncompressed file&lt;/li&gt;&lt;li&gt;web-based applications without extraction&lt;/li&gt;&lt;/ol&gt;&lt;p /&gt;&lt;p&gt;I&#039;m very pleased this will be built into PHP 5.3, it cuts out oodles of code from Pyrus, and will significantly affect both its performance and memory footprint.&lt;/p&gt;&lt;h3&gt;PEAR and namespaces. Oh MY!&lt;/h3&gt;&lt;p&gt;Also important for PEAR2 is making it easier to work with the names, so I&#039;ve been fighting in &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=676&amp;amp;entry_id=198&quot; title=&quot;http://www.google.com/search?q=php+namespace+separator&quot;  onmouseover=&quot;window.status=&#039;http://www.google.com/search?q=php+namespace+separator&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;the namespace wars&lt;/a&gt;.  For a while there, it was looking like namespaces would go the way they had in the PHP 5 beta cycle: to the trash can.  With a little bit of work, we found a solution no one is 100% happy with, but having tried out several possibilities, I must say the solution we chose is something we can be proud of.  There have been many complainers, but the irony I have seen is that most assert they never planned to use namespaces in the first place, which begs the question: why flap your trap if you have no plan to use the thing?  In any case, you know where I stand on the issue.  I wrote &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=677&amp;amp;entry_id=198&quot; title=&quot;http://php.net/namespaces&quot;  onmouseover=&quot;window.status=&#039;http://php.net/namespaces&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;the new manual&lt;/a&gt; as well as the first draft of the patch that made it possible to end the bickering on internals.  A big thanks to Dmitry Stogov and Stanislav Malyshev for their patience, and especially persistence in working out the solution.  Also thanks to many others who fielded opinions on-list, on IRC, and through private email.  Anyone who contributed a real concern rationally and sometimes forcefully deserves credit for the final implementation, and time will prove that it is a very good one for those who need it.&lt;/p&gt;&lt;p&gt;I am, of course, referring to the now infamous decision to use the backslash (\) as the namespace separator in PHP&#039;s implementation of namespaces.  I won&#039;t go into the rationale, except to say that PHP, unlike other languages, implements a very loose autoload implementation, which makes it impossible to do the most common solution to resolving a name conflict between a static method and a namespaced function - disallow that.  In other words, it&#039;s not possible to detect the conflict unless autoload is called on every potential namespaced function call, which introduces a potentially exponential hidden performance loss.  As Stanislav so eloquently put it, name conflicts have not caused major websites to go down, but performance issues have.  Thus, anything that calls autoload where it may be unnecessary is an unacceptable solution, and the only way to safely handle the ambiguity is to eliminate it.&lt;/p&gt;&lt;p&gt;That is what using the backslash does, because the syntax is different between a namespaced function call and a static method.  Complain or ridicule if you&#039;d like, the rest of us will simply shut up and code.&lt;/p&gt;&lt;p&gt;This decision has several other benefits too, including the ability to audit someone else&#039;s code and figure out what you should grep for, a namespace or a class name.  This also translates into better autocomplete in future IDEs, and so on.&lt;/p&gt;&lt;h3&gt;Wrap up&lt;/h3&gt;&lt;p&gt;So, it&#039;s been a long blog post, but a lot has happened in the past several months, and it&#039;s time to get cracking on the future.  More will follow as time allows.&lt;/p&gt;
 
    </description>

    <dc:publisher>Lot 49: Greg Beaver's blog</dc:publisher>
    <dc:creator>nospam@example.com (Greg Beaver)</dc:creator>
    <dc:subject>
    Chiara Quartet, Mac Development, Music, PEAR, PHP, </dc:subject>
    <dc:date>2008-12-10T04:00:17Z</dc:date>
    <wfw:comment>http://greg.chiaraquartet.net/wfwcomment.php?cid=198</wfw:comment>
        <slash:comments>4</slash:comments>
        <wfw:commentRss>http://greg.chiaraquartet.net/rss.php?version=1.0&amp;type=comments&amp;cid=198</wfw:commentRss>
    
    
</item>
<item rdf:about="http://greg.chiaraquartet.net/archives/196-guid.html">
    <title>pear.chiaraquartet.net back online</title>
    <link>http://greg.chiaraquartet.net/archives/196-pear.chiaraquartet.net-back-online.html</link>
    <description>
    For those of you who were wondering where pear.chiaraquartet.net went, we suffered the same fate as Josh Eichorn&#039;s blog and other sites, but all has been restored.
 
    </description>

    <dc:publisher>Lot 49: Greg Beaver's blog</dc:publisher>
    <dc:creator>nospam@example.com (Greg Beaver)</dc:creator>
    <dc:subject>
    PEAR, </dc:subject>
    <dc:date>2008-11-05T05:41:59Z</dc:date>
    <wfw:comment>http://greg.chiaraquartet.net/wfwcomment.php?cid=196</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://greg.chiaraquartet.net/rss.php?version=1.0&amp;type=comments&amp;cid=196</wfw:commentRss>
    
    
</item>
<item rdf:about="http://greg.chiaraquartet.net/archives/195-guid.html">
    <title>What do &quot;Batman, the Dark Knight&quot; and Barack Obama have in common?</title>
    <link>http://greg.chiaraquartet.net/archives/195-What-do-Batman,-the-Dark-Knight-and-Barack-Obama-have-in-common.html</link>
    <description>
    
&lt;p&gt;Last night, I saw &amp;quot;Batman, the Dark Knight&amp;quot; for the first time.  Aside from being a great movie and featuring ridiculous good performances from the late Heath Ledger and others, it got me thinking.  I&#039;ve noticed a huge shift in the way movie makers are portraying both reality and fantasy since 9/11.  First, there is the obvious increase in the number of movies about governmental intrigue, CIA spy junk, invasion of privacy and other things reflecting and amplifying reality.  However, yesterday I noticed that the Joker was referred to as a &amp;quot;terrorist&amp;quot; several times in the movie.&lt;/p&gt;&lt;p&gt;Let&#039;s think about this: a comic book villain whose sole motivation is to sow chaos and destroy civilization is being equated directly with people who reap violence in order to achieve a political or military goal.  The last time we saw the Joker, he was a brilliant but somewhat goofy character in Jack Nicholson who when killing people turned them into caricatures of death in a grotesquely cute way with exaggerated smiles burnt into the corpses faces.  Contrast this to Ledger&#039;s Joker who tells conflicting and gory stories of how he got his smile scars before cutting people&#039;s faces open with a knife.  Nicholson&#039;s Joker wants to create chaos, but for him it&#039;s all a big joke.  Ledger&#039;s Joker is just scary.  He enjoys chaos because it causes good people to do evil things and even become evil embodied, and says this explicitly in one scene.&lt;/p&gt;&lt;p&gt;The scene that got me thinking about the connection to politics was (cover your eyes if you haven&#039;t seen the movie yet) when the massive prisoner seems to be about to blow up the innocents&#039; ferry boat and instead throws the detonator out the window, showing one of the only moments of redemption and hope.  What has exploded Barack Obama&#039;s political stature from non-existent to presidential nominee of the Democrats is &amp;quot;Hope&amp;quot; as political platform.  Go back 8 years to the post-Lewinsky election.  Can you imagine any politician even being able to raise the slightest amount of money based on &amp;quot;hope,&amp;quot; let alone win the nomination of either party?  What gives Barack&#039;s message such potency is that it is the extreme opposite to what we see from the Dick Cheney camp.  Continuous war against an enemy that has neither a defined name, a defined country, or a clear target is a guaranteed recipe for despair and extreme paranoia.  Especially when the only unifying things for this enemy is that they are a few thousand people amongst the 1 billion plus who practice the world&#039;s most populous religion, and they are out to get us.&lt;/p&gt;&lt;p&gt;Barack&#039;s successful message of hope is a direct extreme opposite of the fear and militarism practiced by the establishment, and thus it is very, very important for us to understand what this could mean to us as citizens.  Why?  Extremes sometimes balance each other out by pulling towards the middle, but when they remain separate and intensely opposite, they create what we used to know as &amp;quot;extremists,&amp;quot; those who cling to the far fringes of an idea where the air is thin, intense and rational thought disappears into distant memory.  To be blunt, if you support Barack because he makes you feel hopeful, this is only slightly less scary to me than supporting Bush because he makes you feel safe.  These emotions have the same root: escaping fear.&lt;/p&gt;&lt;p&gt;I happen to personally enjoy both feeling safe and feeling hopeful, but more important to me as a voter is how the candidates will handle themselves in day-to-day workings.  Do they have the intellect to differentiate between opinion and fact?  Can they understand the importance of peer-reviewed science and how to translate this into public policy?  How do they handle conflict amongst the people around them, and how do they handle external conflict imposed upon them by circumstance?  Do they have the ability to see long-term consequences and understand short-term methods of handling them?  Answering these questions for me means looking both at their positions, how they have evolved (especially convenient changes in the past 2 years based on polling), news on how their campaign has been run, and what was important to the candidates before they had any idea of burnishing their public image in order to run for political office.&lt;/p&gt;&lt;p&gt;Returning to the movies, the best example of how our psyche has changed with regards to thrillers comes from the 1998 movie &amp;quot;The Siege&amp;quot; starring Denzel Washington, Annette Benning and Bruce Willis with Tony Shaloub in a supporting role years before he hit it big time with &amp;quot;Monk.&amp;quot;  Willis plays the evil power-hungry general who takes the law into his own hands and is ultimately punished by the strength of the Constitution.  The movie starts out with terrorist bombings in New York City that escalate from a bus to destruction of a building by a car bomb.  In a key moment, Washington walks in on an interrogation of an Arab who is sitting naked in a shower room of a Brooklyn football stadium and Willis starts to discuss &amp;quot;alternative protocols&amp;quot; like waterboarding.  Washington here delivers his big speech that concludes with &amp;quot;what if what they really want is for us to bend the law a little bit, shred the constitution just a little bit?  Because if you torture this man, they will have won.  They have already won!&amp;quot;  At the time, this seemed to be the most remote, horrendously extreme possibility, that an American would even consider torturing a detainee, and it is this act (and the subsequent execution of the prisoner by Willis) that Washington cites in the arrest warrant at the conclusion of the movie (sorry to spoil another one).&lt;/p&gt;&lt;p&gt;Fast forward to today, where in the Republican primary, all but a couple of candidates publicly supported using torture as an interrogation method - and tried to use it to become the nominee for president, and torture was authorized by the Justice Department, the vice president and the president, none of whom have faced even a trial for their decisions.  Is it any wonder hope has been transformed from an ideal into a powerful political tool?&lt;/p&gt;
 
    </description>

    <dc:publisher>Lot 49: Greg Beaver's blog</dc:publisher>
    <dc:creator>nospam@example.com (Greg Beaver)</dc:creator>
    <dc:subject>
    Politics, </dc:subject>
    <dc:date>2008-08-25T03:49:02Z</dc:date>
    <wfw:comment>http://greg.chiaraquartet.net/wfwcomment.php?cid=195</wfw:comment>
        <slash:comments>3</slash:comments>
        <wfw:commentRss>http://greg.chiaraquartet.net/rss.php?version=1.0&amp;type=comments&amp;cid=195</wfw:commentRss>
    
    
</item>
<item rdf:about="http://greg.chiaraquartet.net/archives/194-guid.html">
    <title>Macbook Pro lives up to expectations</title>
    <link>http://greg.chiaraquartet.net/archives/194-Macbook-Pro-lives-up-to-expectations.html</link>
    <description>
    
&lt;p&gt;Well, it&#039;s been a long and practically empty summer for me in terms of coding, what with hardly any internet access and even less time.  I did manage to have time to improve the scheduling program I wrote for &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=658&amp;amp;entry_id=194&quot; title=&quot;http://www.greenwoodmusiccamp.org&quot;  onmouseover=&quot;window.status=&#039;http://www.greenwoodmusiccamp.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Greenwood Music Camp&lt;/a&gt; where we are in residence, but that was it.&lt;/p&gt;&lt;p&gt;Now, a new leaf has been turned over.  The &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=659&amp;amp;entry_id=194&quot; title=&quot;http://www.chiaraquartet.net&quot;  onmouseover=&quot;window.status=&#039;http://www.chiaraquartet.net&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Chiara Quartet&lt;/a&gt; has a residency at the &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=660&amp;amp;entry_id=194&quot; title=&quot;http://www.unl.edu/music&quot;  onmouseover=&quot;window.status=&#039;http://www.unl.edu/music&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;University of Nebraska-Lincoln&lt;/a&gt; that began in 2005 for a 3-year term.  Much to our delight, the residency was renewed for another three years, and converted into a permanent residency.  None of this has much to do with programming, but a perk of this job is that every 3 years, we get a new computer to replace the old one.  This cycle, I requested a Macbook Pro, my first Mac, as I have been using a PC for years.&lt;/p&gt;&lt;p&gt;I had the tech peoples set up &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=661&amp;amp;entry_id=194&quot; title=&quot;http://www.vmware.com/products/fusion/&quot;  onmouseover=&quot;window.status=&#039;http://www.vmware.com/products/fusion/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;VMWare Fusion&lt;/a&gt; for me, and so I am currently running Mac OS X, Ubuntu Linux, and Windows XP simultaneously with noticeable performance gain over any previous computer I have owned, including my custom 64-bit Kubuntu desktop.  The screen is beautiful (15 inch Matte) and speakers far superior to other Macs I&#039;ve heard as well as the Toshiba laptop I will soon return.  I was able to very quickly set up a working PHP 5.3 with xdebug and Komodo in Mac and linux, and almost have the windows side compilation of PHP working, which will greatly accelerate my development.  The ability to share changes with the shared folders between all 3 boxes will be a tremendous boon to my development, this will be fantastic.&lt;/p&gt;&lt;p&gt;It feels good to drop Windows as the native platform too, it&#039;s been a long time coming.&lt;/p&gt;
 
    </description>

    <dc:publisher>Lot 49: Greg Beaver's blog</dc:publisher>
    <dc:creator>nospam@example.com (Greg Beaver)</dc:creator>
    <dc:subject>
    PHP, </dc:subject>
    <dc:date>2008-08-14T22:35:30Z</dc:date>
    <wfw:comment>http://greg.chiaraquartet.net/wfwcomment.php?cid=194</wfw:comment>
        <slash:comments>5</slash:comments>
        <wfw:commentRss>http://greg.chiaraquartet.net/rss.php?version=1.0&amp;type=comments&amp;cid=194</wfw:commentRss>
    
    
</item>
<item rdf:about="http://greg.chiaraquartet.net/archives/193-guid.html">
    <title>PHP namespaces become much better (Derick take note)</title>
    <link>http://greg.chiaraquartet.net/archives/193-PHP-namespaces-become-much-better-Derick-take-note.html</link>
    <description>
    &lt;p&gt;Recently noted by Derick Rethans in &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=655&amp;amp;entry_id=193&quot; title=&quot;http://www.derickrethans.nl/namespaces_in_php.php&quot;  onmouseover=&quot;window.status=&#039;http://www.derickrethans.nl/namespaces_in_php.php&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;an informative blog post&lt;/a&gt;, there is (now was) a problem in the implementation of namespaces in the soon-to-be-released PHP 5.3.  I quote:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;
Take for example this code:
		&lt;/p&gt;&lt;p class=&quot;pre-blurp&quot;&gt;&lt;font face=&quot;courier new,courier,monospace&quot;&gt;&amp;lt;?php&lt;br /&gt;use PEAR::Date::Interval as Interval;&lt;br /&gt;?&amp;gt;
&lt;/font&gt;&lt;/p&gt;&lt;font face=&quot;courier new,courier,monospace&quot;&gt;
&lt;/font&gt;In PHP 5.3 this would alias the class Interval in the namespace
PEAR::Date to the class Interval. For now, this code would work just
fine. However, if PHP would introduce a class &amp;quot;Interval&amp;quot; at
some point in the future (and PHP can do this as it &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url=aHR0cDovL3d3dy5waHAubmV0L21hbnVhbC9lbi91c2VybGFuZG5hbWluZy5ydWxlcy5waHA=&amp;amp;entry_id=193&quot; title=&quot;http://www.php.net/manual/en/userlandnaming.rules.php&quot;  onmouseover=&quot;window.status=&#039;http://www.php.net/manual/en/userlandnaming.rules.php&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;owns the
global namespace&lt;/a&gt;) then the above code would suddenly stop working.&lt;/blockquote&gt;&lt;p&gt;This morning, I realized that this would be very easy to fix, and posted a patch to internals@ with a brief explanation.  Dmitry committed a fix to &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=656&amp;amp;entry_id=193&quot; title=&quot;http://news.php.net/php.zend-engine.cvs/6808&quot;  onmouseover=&quot;window.status=&#039;http://news.php.net/php.zend-engine.cvs/6808&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHP_5_3&lt;/a&gt; and &lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=657&amp;amp;entry_id=193&quot; title=&quot;http://news.php.net/php.zend-engine.cvs/6809&quot;  onmouseover=&quot;window.status=&#039;http://news.php.net/php.zend-engine.cvs/6809&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;HEAD&lt;/a&gt; very quickly.  The issue raised by Derick is now obsolete, making namespaces not just more useful, but even more powerful than they were.&lt;/p&gt;&lt;p&gt;For instance, it is possible to &amp;quot;override&amp;quot; an internal class, perhaps to add missing functionality that will be present in a future release or fix a bug:&lt;/p&gt;&lt;p&gt;mydate.php:&lt;br /&gt;&lt;font face=&quot;courier new,courier,monospace&quot;&gt;&amp;lt;?php&lt;br /&gt;namespace Foo;&lt;br /&gt;class DateTime extends ::DateTime&lt;br /&gt;{&lt;br /&gt;// methods here&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;?php&lt;br /&gt;include &#039;mydate.php&#039;;&lt;br /&gt;use Foo::DateTime; // this essentially overrides internal DateTime class in the current script&lt;br /&gt;$a = new DateTime(&#039;2006-05-04&#039;);&lt;br /&gt;?&amp;gt;&lt;/p&gt;&lt;p&gt;Those who were lamenting the implementation of namespaces in PHP should take note: if you have a solution to make them better, the turnaround time between proposal to the list and commit can be on the order of a few hours if the idea clearly solves a major problem.&lt;/p&gt; 
    </description>

    <dc:publisher>Lot 49: Greg Beaver's blog</dc:publisher>
    <dc:creator>nospam@example.com (Greg Beaver)</dc:creator>
    <dc:subject>
    PHP, </dc:subject>
    <dc:date>2008-06-21T06:33:08Z</dc:date>
    <wfw:comment>http://greg.chiaraquartet.net/wfwcomment.php?cid=193</wfw:comment>
        <slash:comments>4</slash:comments>
        <wfw:commentRss>http://greg.chiaraquartet.net/rss.php?version=1.0&amp;type=comments&amp;cid=193</wfw:commentRss>
    
    
</item>
<item rdf:about="http://greg.chiaraquartet.net/archives/192-guid.html">
    <title>php|tek PEAR/phar/Pyrus talk slides</title>
    <link>http://greg.chiaraquartet.net/archives/192-phptek-PEARpharPyrus-talk-slides.html</link>
    <description>
    I&#039;ve had a few slide requests, so here is a link to the pdf of my slides that Sean Coates put up on the phparch site&lt;p&gt;&lt;a href=&quot;http://greg.chiaraquartet.net/exit.php?url_id=654&amp;amp;entry_id=192&quot; title=&quot;http://tek.phparch.com/mats/slides/greg_beaver-pear_phar.pdf&quot;  onmouseover=&quot;window.status=&#039;http://tek.phparch.com/mats/slides/greg_beaver-pear_phar.pdf&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;http://tek.phparch.com/mats/slides/greg_beaver-pear_phar.pdf&lt;/a&gt;&lt;/p&gt; 
    </description>

    <dc:publisher>Lot 49: Greg Beaver's blog</dc:publisher>
    <dc:creator>nospam@example.com (Greg Beaver)</dc:creator>
    <dc:subject>
    PHP, </dc:subject>
    <dc:date>2008-05-29T16:46:43Z</dc:date>
    <wfw:comment>http://greg.chiaraquartet.net/wfwcomment.php?cid=192</wfw:comment>
        <slash:comments>3</slash:comments>
        <wfw:commentRss>http://greg.chiaraquartet.net/rss.php?version=1.0&amp;type=comments&amp;cid=192</wfw:commentRss>
    
    
</item>

</rdf:RDF>
