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

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   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:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>Coffee|Code : Dan Scott, Caffeinated Librarian Geek - Programming languages</title>
    <link>http://coffeecode.net/</link>
    <description>Many ideas crammed into bits...</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.3.1 - http://www.s9y.org/</generator>
    <pubDate>Thu, 17 Jan 2008 04:01:24 GMT</pubDate>

    <image>
        <url>http://coffeecode.net/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Coffee|Code : Dan Scott, Caffeinated Librarian Geek - Programming languages - Many ideas crammed into bits...</title>
        <link>http://coffeecode.net/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Oooh... looks like I've got (even more) work cut out for me</title>
    <link>http://coffeecode.net/archives/148-Oooh...-looks-like-Ive-got-even-more-work-cut-out-for-me.html</link>
            <category>Coding</category>
            <category>PHP</category>
    
    <comments>http://coffeecode.net/archives/148-Oooh...-looks-like-Ive-got-even-more-work-cut-out-for-me.html#comments</comments>
    <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=148</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://coffeecode.net/rss.php?version=2.0&amp;type=comments&amp;cid=148</wfw:commentRss>
    

    <author>dan@coffeecode.net (Dan Scott)</author>
    <content:encoded>
    &lt;p&gt;
PHP is getting a &lt;a href=&quot;http://www.colder.ch/news/01-16-2008/30/new-datastructures-in-spl.html&quot;&gt;native doubly-linked list structure&lt;/a&gt;. This is fabulous news; when I wrote the &lt;a href=&quot;http://pear.php.net/File_MARC&quot;&gt;File_MARC&lt;/a&gt; PEAR package, I ended up having to implement a &lt;a href=&quot;http://pear.php.net/Structures_LinkedList&quot;&gt;linked list class&lt;/a&gt; in PEAR to support it. File_MARC does its job today (even though I haven&#039;t taken it out of alpha yet), but due to its reliance on userspace data structures it&#039;s an order of magnitude slower than packages like &lt;a href=&quot;http://marc4j.tigris.org&quot;&gt;marc4j&lt;/a&gt; so it&#039;s not the best choice for processing hundreds of thousands of MARC records... today. It hurts a little that the &lt;a href=&quot;http://vufind.org&quot;&gt;VuFind&lt;/a&gt; project has to use a non-PHP solution for populating its Solr indices - although I&#039;m delighted that they have started using File_MARC for some on-demand processing.
&lt;/p&gt;
&lt;p&gt;
Now, when I get a chance (insert raucous mocking laughter here), I hope to be able to make File_MARC use splDoublyLinkedList  and see how it fares with 500K records. Should be good fun! After that, it just needs to be taught how to convert MARC8 to UTF-8, and we&#039;ll have ourselves a fully featured standard MARC package for PHP.
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 16 Jan 2008 22:30:14 -0500</pubDate>
    <guid isPermaLink="false">http://coffeecode.net/archives/148-guid.html</guid>
    
</item>
<item>
    <title>FacBackOPAC: making Casey Durfee's code talk to Unicorn</title>
    <link>http://coffeecode.net/archives/119-FacBackOPAC-making-Casey-Durfees-code-talk-to-Unicorn.html</link>
            <category>Coding</category>
            <category>Python</category>
    
    <comments>http://coffeecode.net/archives/119-FacBackOPAC-making-Casey-Durfees-code-talk-to-Unicorn.html#comments</comments>
    <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=119</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://coffeecode.net/rss.php?version=2.0&amp;type=comments&amp;cid=119</wfw:commentRss>
    

    <author>dan@coffeecode.net (Dan Scott)</author>
    <content:encoded>
    &lt;p&gt;For the past couple of days, I&#039;ve been playing with Casey Durfee&#039;s &lt;a href=&quot;http://extranet.spl.org/code/code4lib2007.zip&quot;&gt;code&lt;/a&gt; that uses Solr and Django to offer a faceted catalogue. My challenge? Turn a dense set of code focused on Dewey and Horizon ILS into a catalogue that speaks LC and Unicorn. Additionally, I want it to serve as both a proof of several technologies (Solr for faceted searching and Django as a Web application framework) to my colleagues and as a reasonable backup catalogue for when our main catalogue fails (as it all too often does).&lt;/p&gt;
&lt;p&gt;I emailed Casey today to tell him that I had a number of patches to contribute as a result of my experiments. It turns out that he&#039;s not really interested in pursuing this particular project much further, so he gave me his blessing to take his throwaway code and do whatever I want with it. Thus, the emergence of the &lt;a href=&quot;http://code.google.com/p/fac-back-opac/&quot;&gt;FacBackOPAC&lt;/a&gt; project on code.google.com. If there&#039;s a grant out there for worst project name ever, this project&#039;s in the running... Anyways, I have contorted Casey&#039;s code so that it supports both Dewey and LC, and with a bit more torture it should be flexible enough to support both Horizon and Unicorn.&lt;/p&gt;
&lt;p&gt;Right now I&#039;ve twisted it all the way to meet my Unicorn needs and consequently have broken Horizon support, but it won&#039;t take much to make it support Horizon again - or any other ILS, for that matter. The main requirement is that you have to be able to get your MARC records and holdings out of your ILS. A secondary requirement is to know how to create links to detailed item views in your current catalogue, because this thing does not yet have any current awareness about item status.&lt;/p&gt;
&lt;p&gt;There. My itch has been scratched for the time being. Go play with the &lt;a href=&quot;http://code.google.com/p/fac-back-opac/&quot;&gt;FacBackOPAC&lt;/a&gt; project -- I even have (very) rough documentation on how to get the pieces installed andthe MARC records indexed, although you&#039;ll have to dig through the source in the Django catalog tree to overcome some hardcoded strings and URLs for the time being. Don&#039;t worry, pulling that hardcoded stuff out of the templates is high on the list of priorities.&lt;/p&gt;
&lt;p&gt;So, a huge thank you to Casey for freeing this code and making this possible. For something he considers throwaway code, I&#039;ve learned a lot from walking through it and making it start to meet my needs. I hope it helps you, too!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 2007-03-18:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Edited links to point to the FacBackOPAC project page, rather than the wiki (which is subject to change, and which did -- breaking the dang links in the original version of this story. Argh!) 
    </content:encoded>

    <pubDate>Thu, 15 Mar 2007 02:06:35 -0400</pubDate>
    <guid isPermaLink="false">http://coffeecode.net/archives/119-guid.html</guid>
    
</item>
<item>
    <title>Lightning talk: File_MARC for PHP</title>
    <link>http://coffeecode.net/archives/118-Lightning-talk-File_MARC-for-PHP.html</link>
            <category>Coding</category>
            <category>PHP</category>
    
    <comments>http://coffeecode.net/archives/118-Lightning-talk-File_MARC-for-PHP.html#comments</comments>
    <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=118</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://coffeecode.net/rss.php?version=2.0&amp;type=comments&amp;cid=118</wfw:commentRss>
    

    <author>dan@coffeecode.net (Dan Scott)</author>
    <content:encoded>
    &lt;p&gt;I gave a lightning talk at the &lt;a href=&quot;http://code4lib.org/2007&quot;&gt;code4lib conference&lt;/a&gt; today on &lt;q&gt;File_MARC for PHP&lt;/q&gt; introducing the &lt;a href=&quot;http://pear.php.net/File_MARC&quot;&gt;File_MARC&lt;/a&gt; library to anybody who hasn&#039;t already heard about it. I crammed nine slides of information into five minutes, which was hopefully enough to convince people to start using it and provide feedback on what could be improved or smoothed out... I&#039;m looking forward to chatting with more people about it over the remaining days of the conference. I&#039;ve already introduced a few people to PHP&#039;s simple tests for test-driven development, so even if nobody ends up using File_MARC, at least people are learning about some of the hidden gems in PHP.&lt;/p&gt;
&lt;p&gt;The funny thing is that I had originally pitched a full session talk on this subject for the conference, and it didn&#039;t make the cut of the ruthless democracy that is code4lib. In retrospect, even a twenty-minute thunder talk probably would have been too much information for anybody but the most die-hard PHP and MARC coder out there; the lightning talk was a perfect format for the talk. I hope to let the documentation do most of the talking in the future.&lt;/p&gt;
&lt;p&gt;Here are the slides from the talk in &lt;a href=&quot;http://coffeecode.net/uploads/talks/2007/File_MARC-lightning.odp&quot;&gt;OpenOffice.org&lt;/a&gt; and &lt;a href=&quot;http://coffeecode.net/uploads/talks/2007/File_MARC-lightning.pdf&quot;&gt;PDF&lt;/a&gt; format. Enjoy!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;/me notes that UnAPI would be useful here... Gotta try and submit a patch to the s9y repository...&lt;/em&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 28 Feb 2007 18:48:56 -0500</pubDate>
    <guid isPermaLink="false">http://coffeecode.net/archives/118-guid.html</guid>
    
</item>
<item>
    <title>Reflections at the start of 2007</title>
    <link>http://coffeecode.net/archives/112-Reflections-at-the-start-of-2007.html</link>
            <category>Coding</category>
            <category>Personal</category>
            <category>PHP</category>
    
    <comments>http://coffeecode.net/archives/112-Reflections-at-the-start-of-2007.html#comments</comments>
    <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=112</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://coffeecode.net/rss.php?version=2.0&amp;type=comments&amp;cid=112</wfw:commentRss>
    

    <author>dan@coffeecode.net (Dan Scott)</author>
    <content:encoded>
    &lt;p&gt;2006 was a year full of change - wonderful, exhausting change. Here&#039;s a month-by-month summary of the highlights of 2006:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;January&lt;/dt&gt;&lt;dd&gt;I did a whole lot of work on the PECL &lt;a href=&quot;http://pecl.php.net/ibm_db2&quot;&gt;ibm_db2 extension&lt;/a&gt;, reviewed a &lt;a href=&quot;http://www.coffeecode.net/archives/32-Review-No-Nonsense-XML-Web-Development-With-PHP-by-Thomas-Myer.html&quot;&gt;good book on XML and PHP&lt;/a&gt;, and finally &lt;a href=&quot;http://www.coffeecode.net/archives/31-CoffeeCode-tweaks.html&quot;&gt;fixed up my blog a little bit&lt;/a&gt;. I&#039;ve got a few more book reviews in the works for 2007, and hope I can spruce up good old Coffee|Code a little more.&lt;/dd&gt;

&lt;dt&gt;February&lt;/dt&gt;&lt;dd&gt;I &lt;a href=&quot;http://www.coffeecode.net/archives/36-Live-blogging-the-WWdN-Sabboth-Invitational.html&quot;&gt;live&lt;/a&gt; &lt;a href=&quot;http://www.coffeecode.net/archives/42-Live-blogging-WWdN15-KentAllard-Invitational.html&quot;&gt;blogged&lt;/a&gt;   a few &lt;a href=&quot;http://www.coffeecode.net/archives/45-Live-blogging-WWdN-16-Robbie-Robb-Invitational.html&quot;&gt;WWdN invitational&lt;/a&gt; poker tourneys, wrote about Larry Menard&#039;s work on &lt;a href=&quot;http://www.coffeecode.net/archives/37-ADOdb-getting-good-support-for-IBM-DB2,-Cloudscape,-and-Apache-Derby.html&quot;&gt;building an ADOdb driver for DB2 based on the ibm_db2 extension&lt;/a&gt; (which is now &lt;a href=&quot;http://phplens.com/lens/adodb/docs-adodb.htm#drivers&quot;&gt;officially supported&lt;/a&gt;), documented my &lt;a href=&quot;http://www.coffeecode.net/archives/41-Simple-wonder.html&quot;&gt;installation of a bird feeder&lt;/a&gt; (update: Spook was happy because a few chickadees visited, but Amber hasn&#039;t really noticed yet), &lt;a href=&quot;http://www.coffeecode.net/archives/43-ibm_db2-close.html&quot;&gt;announced that I was leaving IBM&lt;/a&gt;, and apologized for having to &lt;a href=&quot;http://www.coffeecode.net/archives/44-Some-apologies,-some-reassurances.html&quot;&gt;back out of some engagements&lt;/a&gt; due to the change in jobs. I also promised to write up some fixes to PDO_ODBC and spread out my documentation efforts for PHP, neither of which really happened in 2006 (8 commits to phpdoc ain&#039;t all that) -- but I recently made use of the &lt;a href=&quot;http://php.net/xmlwriter&quot;&gt;xmlwriter&lt;/a&gt; extension in implementing MARCXML support for &lt;a href=&quot;http://pear.php.net/File_MARC&quot;&gt;File_MARC&lt;/a&gt; and noticed that xmlwriter badly needs a tech writer. So maybe I can pull it together in 2007.&lt;/dd&gt;

&lt;dt&gt;March&lt;/dt&gt;&lt;dd&gt;&lt;a href=&quot;http://www.coffeecode.net/archives/46-Live-blogging-WWdN-17-Fishy-McDonk-Invitational.html&quot;&gt;More&lt;/a&gt; &lt;a href=&quot;http://www.coffeecode.net/archives/47-Stop-me-if-youve-heard-this-one-before.html&quot;&gt;live&lt;/a&gt;  &lt;a href=&quot;http://www.coffeecode.net/archives/49-Live-blogging-WWdN-something,-pink-floyd-in-the-house.html&quot;&gt;blogging&lt;/a&gt;  of &lt;a href=&quot;http://www.coffeecode.net/archives/51-Semi-live-blogging-WWdN-21,-jg-2323-invitational.html&quot;&gt;WWdN tournaments&lt;/a&gt;. How did I manage to have this much time in the first month of my new job? Amazing.  I also &lt;a href=&quot;http://www.coffeecode.net/archives/48-No-Hot-Coffee,-please,-Im-Canadian.html&quot;&gt;helped horny teenagers&lt;/a&gt; find relief with &lt;em&gt;GTA: San Andreas&lt;/em&gt;. But, in the middle of all that completely trivial stuff, our friends Mike and Kelly threw an &lt;a href=&quot;http://www.coffeecode.net/archives/50-Baby-shower-from-Jamies-point-of-view.html&quot;&gt;incredible baby shower&lt;/a&gt; for us. It was amazing to be surrounded by so many friends who were actually &lt;strong&gt;happy&lt;/strong&gt; that we were procreating! I do wish that we could visit more often, but based on last weekend&#039;s shenanigans this travel thing is starting to take more of a toll on Amber and her parents.&lt;/dd&gt;

&lt;dt&gt;April&lt;/dt&gt;&lt;dd&gt;Lynn and I attended an &lt;a href=&quot;http://www.coffeecode.net/archives/52-Theatre-of-the-macabre.html&quot;&gt;vaudeville-style horror show&lt;/a&gt;. Who says Sudbury doesn&#039;t have culture? I took my readers on &lt;a href=&quot;http://www.coffeecode.net/archives/53-Walk-to-work-with-me.html&quot;&gt;my walk to work&lt;/a&gt;, and I should note that within a couple of months of taking on the new job I had lost a bunch of weight. Activity is good! I &lt;a href=&quot;http://www.coffeecode.net/archives/54-Live-blogging-WWdN,-presdlee-invitational.html&quot;&gt;live-blogged&lt;/a&gt; a couple more &lt;a href=&quot;http://www.coffeecode.net/archives/56-Live-blogging-WWdN-Change100-Invitational.html&quot;&gt;WWdN invitationals&lt;/a&gt;, and Lynn and I &lt;a href=&quot;http://www.coffeecode.net/archives/57-No-baby-yet.html&quot;&gt;waited&lt;/a&gt; and &lt;a href=&quot;http://www.coffeecode.net/archives/58-Not-today,-either....html&quot;&gt;waited&lt;/a&gt; for the baby to arrive, including such fine events as attending Earth Day and the inaugural Nickel City Triathlon Team barbecue.&lt;/dd&gt;

&lt;dt&gt;May&lt;/dt&gt;&lt;dd&gt;We continued to &lt;a href=&quot;http://www.coffeecode.net/archives/59-Until-tomorrow,-Ill-just-keep-movin-on.html&quot;&gt;wait&lt;/a&gt; &lt;a href=&quot;http://www.coffeecode.net/archives/62-We-prefer-our-baby-well-done,-thanks.html&quot;&gt;for&lt;/a&gt; &lt;a href=&quot;http://www.coffeecode.net/archives/63-No-baby-tonight-in-my-coffee,-no-baby-tonight-in-my-tea.html&quot;&gt;Amber&lt;/a&gt; to arrive, and managed to fit in a viewing of &lt;em&gt;V for Vendetta&lt;/em&gt; during pre-labor. Eventually Amber did decide to join us in the outer world (saving me from having to run a 10K--yay!), and I &lt;a href=&quot;http://www.coffeecode.net/archives/64-Emergency-cabbage-Amber-Colleen-has-arrived.html&quot;&gt;posted&lt;/a&gt; the &lt;a href=&quot;http://www.coffeecode.net/archives/66-More-Amber-photo-goodness.html&quot;&gt;pictorial evidence&lt;/a&gt;. Oh, and I &lt;a href=&quot;http://www.coffeecode.net/archives/61-Live-blogging-WWdN-IlliniFan-Invitational.html&quot;&gt;live-blogged&lt;/a&gt; some more &lt;a href=&quot;http://www.coffeecode.net/archives/65-Live-blogging-WWdN-godard-invitational.html&quot;&gt;WWdN tourneys&lt;/a&gt;.&lt;/dd&gt;

&lt;dt&gt;June&lt;/dt&gt;&lt;dd&gt;I &lt;a href=&quot;http://www.coffeecode.net/archives/69-Tour-de-Sudbury.html&quot;&gt;rode around Sudbury&lt;/a&gt;, posted some &lt;a href=&quot;http://www.coffeecode.net/archives/70-High-traffic-zone.html&quot;&gt;more Amber pics&lt;/a&gt; while putting my antisocial tendencies on display, and rather shockingly &lt;a href=&quot;http://www.coffeecode.net/archives/71-Walking-away-from-online-poker,-towards-the-fambly.html&quot;&gt;announced my departure from online poker&lt;/a&gt;. Shortly thereafter, the withdrawal symptoms kicked in and I unleashed in my first library-oriented post &lt;a href=&quot;http://www.coffeecode.net/archives/72-My-answer-to-I-would-recommend-Vendor-X-to-other-libraries..html&quot;&gt;about our library system vendor&lt;/a&gt;. Looking back, I can&#039;t believe it took me almost four months to publicly snap at our vendor.&lt;/dd&gt;

&lt;dt&gt;July&lt;/dt&gt;&lt;dd&gt;I started my parental leave, and oddly enough wrote two blog entries in all of July. I guess I was actually spending significant quality time with Amber -- cool! On Canada Day, I ran &lt;a href=&quot;http://www.coffeecode.net/archives/74-The-rough-beast-slouches-towards-Lively.html&quot;&gt;my first 5K race&lt;/a&gt; in about five years. Unfortunately, the other entry dealt with the loss of my co-worker, Alain Letourneau. I found out later that some of his friends from library school only found out about his death through my &lt;a href=&quot;http://www.coffeecode.net/archives/73-Passing,-brighter-than-ever-before.html&quot;&gt;brief memorial to Alain&lt;/a&gt;, which is a bittersweet result I suppose. Tomorrow, a new librarian who was hired to fill Alain&#039;s position is joining the library; we won&#039;t forget Alain, but in a way it will be nice to have someone new moving around that office so that I don&#039;t have to walk past that empty room and locked door anymore.&lt;/dd&gt;

&lt;dt&gt;August&lt;/dt&gt;&lt;dd&gt;During the second month of my parental leave, I focused a bit more on communicating to the outside world and posted some &lt;a href=&quot;http://www.coffeecode.net/archives/75-Admirers-of-the-little-one.html&quot;&gt;more pictures of Amber&lt;/a&gt; (although I still have to install that baby gate correctly) and pictures of the &lt;a href=&quot;http://www.coffeecode.net/archives/76-Northern-Ontario-scenery.html&quot;&gt;French River bridge and Bell Park dragon boat races&lt;/a&gt;. I kicked off my efforts to build a &lt;a href=&quot;http://www.coffeecode.net/archives/78-Super-alpha-MARC-package-for-PHP-comments-requested.html&quot;&gt;MARC package for PHP&lt;/a&gt;, which ultimately spawned &lt;a href=&quot;http://www.coffeecode.net/archives/81-File_MARC-and-Structure_Linked_List-new-alpha-releases.html&quot;&gt;another package to implement a basic linked list structure&lt;/a&gt;. Lynn, Amber, and I made it to &lt;a href=&quot;http://www.coffeecode.net/archives/80-Cultural-influences-young-childs-fragile-eggshell-mind.html&quot;&gt;a couple of bad movies&lt;/a&gt;, and I finished &lt;a href=&quot;http://www.coffeecode.net/archives/79-Im-not-as-sore-as-I-thought-I-would-be.html&quot;&gt;my first sprint duathlon&lt;/a&gt;. Lynn gets the top kudos, though, for running in a Try-a-Triathlon just three months after bringing Amber into the world. This year I&#039;m hoping to do an Olympic distance triathlon, although I understand that some swimming skill is required for that...&lt;/dd&gt;

&lt;dt&gt;September&lt;/dt&gt;&lt;dd&gt;I started out the month a little bit bitter after &lt;a href=&quot;http://www.coffeecode.net/archives/82-AfterMARC-Morphing,-murdering,-or-massaging-the-MARC-format.html&quot;&gt;responding&lt;/a&gt; to &lt;a href=&quot;http://kcoyle.blogspot.com/2006/09/marc-we-can-do-it.html&quot;&gt;a call for a wiki&lt;/a&gt; on the MARC listserv, only to be told later &quot;thanks but no thanks, we&#039;re working on something ourselves&quot;. Eventually it ended up &lt;a href=&quot;http://futurelib.pbwiki.com/&quot;&gt;getting hosted on pbwiki&lt;/a&gt; where everybody shares a single user account (&lt;em&gt;shrug&lt;/em&gt;). Lynn, Amber, and I ran &lt;a href=&quot;http://www.coffeecode.net/archives/83-Another-day,-another-5K.html&quot;&gt;another 5K&lt;/a&gt; in our neighbourhood. I wrote about some recent examples of how &lt;a href=&quot;http://www.coffeecode.net/archives/84-Why-open-source-works....html&quot;&gt;open source works&lt;/a&gt; based on the PEAR proposal process and PHP ext/filter API discussions, and noted &lt;a href=&quot;http://www.coffeecode.net/archives/85-Why-quasi-open-source-doesnt-work.html&quot;&gt;how pseudo-open-source doesn&#039;t work&lt;/a&gt; after I found that IBM developerWorks had completely pulled the Mapuccino project. Come to think of it, I never did find a good open-source Web site visualization tool. Late in the month, I reflected on the role I&#039;m fulfilling as a &lt;a href=&quot;http://www.coffeecode.net/archives/86-Laundry-list-systems-librarians.html&quot;&gt;laundry list system librarian&lt;/a&gt;. That kind of role satisfies my generalist nature, even though it&#039;s a bit overwhelming at times.&lt;/dd&gt;

&lt;dt&gt;October&lt;/dt&gt;&lt;dd&gt;I attended Access 2006 and felt like I had finally met other members of my own species in the flesh (although I had previously met many of the same people on &lt;tt&gt;#code4lib&lt;/tt&gt;, it was nice to put names to faces and share thoughts over food). After &lt;a href=&quot;http://www.coffeecode.net/archives/90-Backlog-of-Access-2006-notes.html&quot;&gt;taking&lt;/a&gt; &lt;a href=&quot;http://www.coffeecode.net/archives/99-Belated-Access-2006-notes-Saturday,-Oct.-14th.html&quot;&gt;a&lt;/a&gt; &lt;a href=&quot;http://www.coffeecode.net/archives/95-Access-2006-notes-October-12.html&quot;&gt;ton&lt;/a&gt; of &lt;a href=&quot;http://www.coffeecode.net/archives/97-Getting-the-Goods-Libraries-and-the-Last-Mile.html&quot;&gt;notes&lt;/a&gt;, I &lt;a href=&quot;http://www.coffeecode.net/archives/89-Calling-for-access-to-all-future-Access-presentations.html&quot;  title=&quot;null&quot;&gt;called for all future Access conferences to require presenters&lt;/a&gt; to make their presentations available. I took a trip immediately after Access 2006 to Huntsville, Alabama for a week of training by our library systems vendor, and noted &lt;a href=&quot;http://www.coffeecode.net/archives/91-Feeling-sorry-for-our-vendor.html&quot;&gt;how horrible&lt;/a&gt; their customer experience was for sales and training pitches. Maybe their new owner will take a gander at some of their customer surveys... My &lt;a href=&quot;http://www.coffeecode.net/archives/92-Double-barreled-PHP-releases.html&quot;&gt;PEAR proposal&lt;/a&gt; became an &lt;a href=&quot;http://pear.php.net/Structures_LinkedList&quot;&gt;official PEAR package&lt;/a&gt;, and I revised File_MARC based on the results of the Access 2006 Hackfest (where I learned that loading a 500 Mb file into memory and then parsing it doesn&#039;t work too well with most systems).&lt;/dd&gt;

&lt;dt&gt;November&lt;/dt&gt;&lt;dd&gt;Amber &lt;a href=&quot;http://www.coffeecode.net/archives/100-Its-Halloween,-baby!.html&quot;&gt;dressed up for Hallowe&#039;en&lt;/a&gt;, and &lt;a href=&quot;http://www.coffeecode.net/archives/101-PEAR-File_MARC-0.1.0-alpha-officially-released.html&quot;&gt;File_MARC became an official PEAR package&lt;/a&gt;. I discovered that &lt;a href=&quot;http://www.coffeecode.net/archives/102-Neat-o-Archimede-uses-Apache-Derby.html&quot;&gt;Archimedes&lt;/a&gt; uses Apache Derby as its database of choice, but was disappointed with the &quot;guessing game&quot; user interface that broke all known usability rules. I took a bus/train journey down to Windsor for the &lt;a href=&quot;http://www.coffeecode.net/archives/103-Future-of-the-ILS-Symposium-building-our-community-and-a-business-case.html&quot;&gt;Future of the ILS Symposium&lt;/a&gt;, got a &lt;a href=&quot;http://www.coffeecode.net/archives/104-BiblioCommons-wireframe-walk-through.html&quot;&gt;sneak preview&lt;/a&gt; of what BiblioCommons is up to, and pressed Mike Rylander for details on &lt;a href=&quot;http://www.coffeecode.net/archives/105-Evergreen-internationalization-chat.html&quot;&gt;how Evergreen / Open-ILS supports internationalization&lt;/a&gt;. I began trying in earnest to build a VMWare image running Evergreen, &lt;a href=&quot;http://open-ils.org/dokuwiki/doku.php?id=installing_prerequisites_on_ubuntu&quot;&gt;first with Ubuntu&lt;/a&gt; and &lt;a href=&quot;http://open-ils.org/dokuwiki/doku.php?id=installing_prerequisites_on_gentoo&quot;&gt;then with Gentoo&lt;/a&gt;, before stalling out somewhere in early December. This is one ball I intend to pick up again in early 2007 -- we badly need a backup OPAC. Somehow I failed to mention the week that Lynn, Amber, and I spent in Cuba for my sister-in-law&#039;s wedding.&lt;/dd&gt;
&lt;dt&gt;December&lt;/dt&gt;&lt;dd&gt;In December I was fairly quiet, as I was highly focused at work on finishing a number of projects that I had artificially set year-end deadlines for myself. To be honest, I just didn&#039;t want to spend my Christmas break thinking about them... I noticed that SirsiDynix made an odd press release on December 22nd, and &lt;a href=&quot;http://www.coffeecode.net/archives/108-Musing-about-SirsiDynixs-new-investment-partner.html&quot;&gt;indulged in wild speculation&lt;/a&gt; over what that meant. Library Journal picked up my blog post and quoted my creative conjecture, spawning several other posts on the topic, and I resolved to take the power of the blog a bit more seriously in the future. On December 21st I started responding to an LWN article that I felt &lt;a href=&quot;http://www.coffeecode.net/archives/110-The-state-of-PHP-security-LWN-article.html&quot;&gt;misrepresented the state of PHP security&lt;/a&gt;; although I wondered at times if the holiday egg nog had me tilting at windmills, the author of the article &lt;a href=&quot;http://lwn.net/Articles/215123/#Comments&quot;&gt;ultimately agreed with me&lt;/a&gt;. On Christmas eve I gave the present of &lt;a href=&quot;http://www.coffeecode.net/archives/109-We-want-Amber!-We-want-Amber!.html&quot;&gt;more Amber photos&lt;/a&gt;.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;So, all in all, it was a pretty full year of geekdom, some regular exercise, a bit too much poker, a ton of travel, and a whole lot of change. There wasn&#039;t nearly enough Amber (of course there can never be enough), even though I have her all to myself a couple of mornings each week. But I&#039;m living with the people that I love, doing fulfilling work, and that&#039;s all I can really ask for.
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 02 Jan 2007 20:42:14 -0500</pubDate>
    <guid isPermaLink="false">http://coffeecode.net/archives/112-guid.html</guid>
    
</item>
<item>
    <title>The state of PHP security (LWN article)</title>
    <link>http://coffeecode.net/archives/110-The-state-of-PHP-security-LWN-article.html</link>
            <category>PHP</category>
    
    <comments>http://coffeecode.net/archives/110-The-state-of-PHP-security-LWN-article.html#comments</comments>
    <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=110</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://coffeecode.net/rss.php?version=2.0&amp;type=comments&amp;cid=110</wfw:commentRss>
    

    <author>dan@coffeecode.net (Dan Scott)</author>
    <content:encoded>
    &lt;p&gt;
One of my favourite online publications, the Linux Weekly News, recently published an article called &lt;a href=&quot;http://lwn.net/Articles/215123&quot;&gt;The state of PHP security&lt;/a&gt;. Given Stefan&#039;s departure, the great taint debate, the addition of &lt;tt&gt;ext/filter&lt;/tt&gt; in 5.2.0 and all of the associated security changes in both the 5.2.x and the 6 branches, I settled down to enjoy a nice pre-Christmas read. I was hoping for some provocative thoughts about the direction that PHP has been taking for the last six months or so in the arena of security.
&lt;/p&gt;
&lt;p&gt;
Unfortunately, I was greatly disappointed. Beyond using Stefan&#039;s departure as a kicking-off point for the article, the author didn&#039;t even mention any of these issues. Instead, he simply rehashed the history of PHP design missteps (&lt;tt&gt;magic_quotes&lt;/tt&gt;, &lt;tt&gt;register_globals&lt;/tt&gt;, allowing URLs in &lt;tt&gt;include&lt;/tt&gt;) and noted that many PHP tutorials rely on dangerous practices.
&lt;/p&gt;
&lt;p&gt;
What bothered me the most, however, was the author&#039;s decision to paraphrase a quote Rasmus gave in an interview from 2002 without explicitly noting that the quote was from 2002. The sentence in the article, talking about &lt;tt&gt;register_globals&lt;/tt&gt;, is:
&lt;/p&gt;
&lt;blockquote&gt;
It is an extremely dubious feature, but one that PHP creator, Rasmus Lerdorf, seems to think should have been &lt;a href=&quot;http://www.sitepoint.com/article/phps-creator-rasmus-lerdorf/3&quot;&gt;left on&lt;/a&gt; by default.
&lt;/blockquote&gt;
&lt;p&gt;
Would it have been too much for the author to have actually asked Rasmus if he might have changed his mind in the past five years? Or perhaps the author could have done a little more research and dug up the &lt;a href=&quot;http://www.php.net/~derick/meeting-notes.html&quot;&gt;PHP 6 planning meeting minutes&lt;/a&gt; that state that &lt;tt&gt;register_globals&lt;/tt&gt; and &lt;tt&gt;magic_quotes&lt;/tt&gt; were going to be removed entirely from the language. Instead, the author concludes with the following statement:
&lt;/p&gt;
&lt;blockquote&gt;Security seems to fall somewhere below simplicity in the minds of the PHP language developers; that makes it more difficult to have secure PHP applications. Security is a hard problem and any attempt to &#039;dumb down&#039; a language is likely to run into security issues.  Encouraging amateur programmers to write web applications is unlikely to produce secure code in any language, but by providing tutorials and examples that have glaring security issues and by not concentrating on teaching secure coding, PHP makes it that much worse. A great deal of useful code has been written on the PHP platform; it would be nice to find a way to keep that code coming while simultaneously making it more secure.&lt;/blockquote&gt;
&lt;p&gt;
The first sentence in that statement is the most damning of PHP developers, but it entirely ignores the evidence exhibited in the changes we&#039;ve seen in &lt;a href=&quot;http://www.php.net/releases/5_2_0.php&quot;&gt;PHP 5.2.0&lt;/a&gt; and that are in the works for PHP 6. The third sentence, oddly enough, attributes the existence of &quot;tutorials and examples that have glaring security issues&quot; to PHP itself, as though the language itself or the core developers of the language have the ability to prevent insecure tutorials from being published.
&lt;/p&gt;
&lt;p&gt;
So I launched into the fray and attempted to right those injustices, perhaps a bit too passionately -- but so be it. I&#039;ve been pretty quiet in the PHP world for the past while, outside of my little PEAR projects, but I still care about the language.
&lt;/p&gt;
&lt;p&gt;
If I can glean anything from this article, it suggests that it might be a good idea to revamp the php.net landing page and documentation a bit to try to highlight tutorials that teach developers how to write secure PHP applications. Right now the landing page is largely a bulletin board for events. It might benefit, say, from a prominent and permanent link to the &lt;a href=&quot;http://phpsec.org/&quot;&gt;PHP Security Consortium&lt;/a&gt; (if that project is actually still alive--the last posted article dates back to March 2005). We may also want to improve the visibility of the security chapter of the manual (although briefly revisiting the section on SQL injection suggests that we need to revise it to encourage the use of PDO and placeholders).
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 27 Dec 2006 23:52:13 -0500</pubDate>
    <guid isPermaLink="false">http://coffeecode.net/archives/110-guid.html</guid>
    
</item>
<item>
    <title>PEAR File_MARC 0.1.0 alpha officially released</title>
    <link>http://coffeecode.net/archives/101-PEAR-File_MARC-0.1.0-alpha-officially-released.html</link>
            <category>Coding</category>
            <category>PHP</category>
    
    <comments>http://coffeecode.net/archives/101-PEAR-File_MARC-0.1.0-alpha-officially-released.html#comments</comments>
    <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=101</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://coffeecode.net/rss.php?version=2.0&amp;type=comments&amp;cid=101</wfw:commentRss>
    

    <author>dan@coffeecode.net (Dan Scott)</author>
    <content:encoded>
    &lt;p&gt;Just a short note to let y&#039;all know that I received the thumbs-up from my fellow PEAR developers to add &lt;a href=&quot;http://pear.php.net/File_MARC&quot;&gt;File_MARC&lt;/a&gt; as an official PEAR package.&lt;/p&gt;
&lt;p&gt;What does this mean? Well, assuming you have PHP 5.1+ and PEAR installed, you can now download and install File_MARC and its prerequisite with a simple command:&lt;/p&gt;
&lt;pre&gt;pear install File_MARC-alpha&lt;/pre&gt;
&lt;p&gt;I&#039;ve also imported the File_MARC source into the PEAR CVS repository, so you can poke and prod and provide patches.&lt;/p&gt;
&lt;p&gt;Before moving to a 1.0 release, I have to write up some user-oriented documentation. I have a hankering to provide MARCXML support as well, so that will probably work its way into the package before 1.0. I&#039;d love some more testing and feedback from other library geeks; now that installation is so simple, I&#039;m hoping to see the &lt;s&gt;bugs&lt;/s&gt;&lt;u&gt;feedback&lt;/u&gt; roll in.&lt;/p&gt;
&lt;p&gt;Oh yes:  a big thanks to the PEAR developers who have given me some excellent suggestions along the way, from my first proposal all the way through to this alpha release. File_MARC wouldn&#039;t be what it is today without your help!&lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 14 Nov 2006 13:55:29 -0500</pubDate>
    <guid isPermaLink="false">http://coffeecode.net/archives/101-guid.html</guid>
    
</item>
<item>
    <title>Serendipity (s9y) blog: Security release </title>
    <link>http://coffeecode.net/archives/96-Serendipity-s9y-blog-Security-release.html</link>
            <category>PHP</category>
    
    <comments>http://coffeecode.net/archives/96-Serendipity-s9y-blog-Security-release.html#comments</comments>
    <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=96</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://coffeecode.net/rss.php?version=2.0&amp;type=comments&amp;cid=96</wfw:commentRss>
    

    <author>dan@coffeecode.net (Dan Scott)</author>
    <content:encoded>
    &lt;p&gt;Folks, if you use &lt;a href=&quot;http://www.s9y.org&quot;&gt;Serendipity&lt;/a&gt;, I thought you should know they just released a security update to fix an XSS issue in the administration backend. Unfortunately, s9y.org itself appears to be very ill at the moment: I kept getting &lt;tt&gt;500 - Internal Server Error&lt;/tt&gt;.&lt;/p&gt;
&lt;p&gt;However, the new release with the security fix (1.0.2) is available for download from &lt;a href=&quot;http://prdownloads.sourceforge.net/php-blog/&quot;&gt;http://prdownloads.sourceforge.net/php-blog/&lt;/a&gt; -- I recommend you go forth and upgrade.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Thu, 19 Oct 2006 08:08:10 -0400</pubDate>
    <guid isPermaLink="false">http://coffeecode.net/archives/96-guid.html</guid>
    
</item>
<item>
    <title>Double-barreled PHP releases</title>
    <link>http://coffeecode.net/archives/92-Double-barreled-PHP-releases.html</link>
            <category>Coding</category>
            <category>PHP</category>
    
    <comments>http://coffeecode.net/archives/92-Double-barreled-PHP-releases.html#comments</comments>
    <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=92</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://coffeecode.net/rss.php?version=2.0&amp;type=comments&amp;cid=92</wfw:commentRss>
    

    <author>dan@coffeecode.net (Dan Scott)</author>
    <content:encoded>
    &lt;p&gt;I&#039;m the proud parent of two new releases over the past couple of days: one official PEAR release for linked list fans, and another revision of the &lt;a href=&quot;http://pear.php.net/pepr/pepr-proposal-show.php?id=443&quot;&gt;File_MARC&lt;/a&gt; proposal for library geeks.&lt;/p&gt;
&lt;h3&gt;Structures_LinkedList&lt;/h3&gt;
&lt;p&gt;A few days ago marked the first official PEAR release of the &lt;a href=&quot;http://pear.php.net/package/Structures_LinkedList&quot;&gt;Structures_LinkedList&lt;/a&gt;. Yes, it&#039;s only at 0.1.0-alpha, but I&#039;m pretty damned happy with the code at this stage and unless something drastic happens the only significant change I foresee between now and 1.0-stable is the addition of some user-oriented documentation. This code got a severe workout at the &lt;a href=&quot;http://feeds.feedburner.com/~r/onebiglibrary/~3/38149988/006-access-hackfest&quot;&gt;Access 2006 Hackfest&lt;/a&gt;, where I ran headlong into some significant limitations in parsing huge files.&lt;/p&gt;
&lt;p&gt;A few days later, after misdirecting some precious #php.pecl brainpower (sorry, sorry, sorry Wez, Ilia, and Tony) on the wrong problem, I discovered the reason writing your own &lt;tt&gt;__destruct()&lt;/tt&gt; methods can be very, very necessary. If you don&#039;t clean up variables that PHP doesn&#039;t know how to deal with--say, nodes in a doubly-linked list that look like circular reference hell to PHP--then you&#039;re going to be in for a world of hurt for anything but the smallest of test scenarios. This particular problem has had a stake put through its heart in Structures_LinkedList as of the 0.1.0-alpha release. Go forth and create linked lists!&lt;/p&gt;
&lt;h3&gt;File_MARC&lt;/h3&gt;
&lt;p&gt;On the library geek front, I pushed out File_MARC 0.0.9 via the PEAR Proposal process today. This new release repairs another embarassing problem that I originally blamed for breaking down during our Hackfest work. You see, I hadn&#039;t touched emilda.org&#039;s php-marc core routine for parsing MARC files, and it happened to call &lt;tt&gt;file()&lt;/tt&gt; to read the entire target MARC file into memory as an array of lines before enabling you to start parsing the individual MARC records. That&#039;s nifty if you just want to count all of the MARC records in a given file, but it doesn&#039;t scale up very well when you&#039;ve brought, oh, a single file with a half-million MARC records to parse. In fact, PHP kind of gets very upset with you.&lt;/p&gt;
&lt;p&gt;The solution, as Dan Chudnov suggested on the fly during my Hackfest interview, was to go with streams. It turns out that &lt;tt&gt;&lt;a href=&quot;http://php.net/stream_get_line&quot;&gt;stream_get_line()&lt;/a&gt;&lt;/tt&gt; was perfectly suited to the task: given a file pointer, it sucks in the contents of that file until it reaches a maximum length or a given string, then waits until you ask it to suck in the next chunk of data. It was a breeze to convert the code to the following approach:&lt;/p&gt;
&lt;pre&gt;
const END_OF_RECORD = &quot;\x1D&quot;;
const MAX_RECORD_LENGTH = 99999;
...
$this-&gt;source = fopen($source, &#039;rb&#039;);
...
$record = stream_get_line($source, MAX_RECORD_LENGTH, END_OF_RECORD);
&lt;/pre&gt;
&lt;p&gt;That change solved the &quot;big file&quot; problem, but as File_MARC represents MARC records as linked lists (fields) containing linked lists (subfields), the big file issue was just covering up the slightly more twisted memory managment issue in the Structures_LinkedList library. However, after those two changes, testing out the same code I had hastily written at Hackfest shows that the script to parse a 512M MARC file now never takes more than 0.8% of my system memory.&lt;/p&gt;
&lt;p&gt;So, library geeks -- this is a last call for significant comments on the File_MARC API. In a couple of days, I plan to put this proposal up for a vote to become an official PEAR package. Of course, if you want to test it out right now, I have high confidence in the code: you can grab it from &lt;a href=&quot;http://marc.coffeecode.net&quot;&gt;marc.coffeecode.net&lt;/a&gt;. And yes, if you visit that site, I &lt;em&gt;am&lt;/em&gt; grasping for the worst throwback HTML design award ever, thank you very much!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 2006-10-19:&lt;/strong&gt; Correct XHTML syntax errors. Heh.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 17 Oct 2006 23:15:06 -0400</pubDate>
    <guid isPermaLink="false">http://coffeecode.net/archives/92-guid.html</guid>
    
</item>
<item>
    <title>Why quasi-open source doesn't work</title>
    <link>http://coffeecode.net/archives/85-Why-quasi-open-source-doesnt-work.html</link>
            <category>Programming languages</category>
    
    <comments>http://coffeecode.net/archives/85-Why-quasi-open-source-doesnt-work.html#comments</comments>
    <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=85</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://coffeecode.net/rss.php?version=2.0&amp;type=comments&amp;cid=85</wfw:commentRss>
    

    <author>dan@coffeecode.net (Dan Scott)</author>
    <content:encoded>
    &lt;p&gt;A few minutes ago, I gave you some &lt;a href=&quot;http://coffeecode.net/archives/84-Why-open-source-works....html&quot;&gt;examples of how open source works&lt;/a&gt;. Now I&#039;m going to give you an example of how quasi-open source doesn&#039;t work.&lt;/p&gt;
&lt;p&gt;Looking for a tool to help visualize the development of our library&#039;s new Web site, I came across a reference in the &lt;a href=&quot;http://www.cybergeography.org/atlas/web_sites.html&quot;&gt;Atlas of Cyberspaces&lt;/a&gt; to:
&lt;/p&gt;
&lt;blockquote&gt;
a neat Java application for dynamically constructing interactive visual maps of Web sites
&lt;/blockquote&gt;
&lt;p&gt;
The &lt;q&gt;neat Java application&lt;/q&gt; was called &lt;a href=&quot;http://www.alphaworks.ibm.com/tech/mapuccino&quot;&gt;Mappucino&lt;/a&gt;. The tool was released through IBM&#039;s &lt;a href=&quot;http://www.alphaworks.ibm.com&quot;&gt;alphaWorks&lt;/a&gt;, a site that I had long (and wrongly) associated with as IBM&#039;s location for open source projects. One must read the fine print, however; the following sentences from &lt;a href=&quot;http://www.alphaworks.ibm.com/about&quot;&gt;&lt;cite&gt;About alphaWorks&lt;/cite&gt;&lt;/a&gt; summarize alphaWork&#039;s purpose for existence:
&lt;/p&gt;
&lt;blockquote&gt;
Since 1996, alphaWorks has succeeded in helping IBM connect with innovative developers to lead the development of promising new standards, products, and open-source technology.

To date, forty percent of technologies posted to the alphaWorks Web site have been incorporated into IBM products or licensed to third-party developers.
&lt;/blockquote&gt;
&lt;p&gt;So, other than the remarkably commercial bent of the goals for the site projects, what surprised me was the text displayed when I followed the link to &lt;a href=&quot;http://www.alphaworks.ibm.com/tech/mapuccino&quot;&gt;Mappucino&lt;/a&gt;:
&lt;/p&gt;
&lt;blockquote&gt;Mapuccino has been retired.&lt;/blockquote&gt;
&lt;p&gt;Yup, that&#039;s it. No link to a download. No source code. Just the bios of six researchers who probably laboured over this project for months--not to mention any input from the &lt;q&gt;innovative developers&lt;/q&gt; from outside IBM--only to see it disappear without a trace. Even if the tool was stuck deeply in JRE 1.3 (or earlier) code, somebody might have been willing to pick it up and update it for JRE 1.5. Blah. Boo. Based on this experience, I wouldn&#039;t suggest volunteering too much time to help out with an alphaWorks project. Real open source has an openly accessible source code repository with an accompanying open source license and a genuine commitment behind it to make the code available.&lt;/p&gt;
&lt;p&gt;My quest for a good Web site visualization tool continues, by the way. Recommendations are welcomed.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 19 Sep 2006 19:27:32 -0400</pubDate>
    <guid isPermaLink="false">http://coffeecode.net/archives/85-guid.html</guid>
    
</item>
<item>
    <title>Why open source works...</title>
    <link>http://coffeecode.net/archives/84-Why-open-source-works....html</link>
            <category>PHP</category>
    
    <comments>http://coffeecode.net/archives/84-Why-open-source-works....html#comments</comments>
    <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=84</wfw:comment>

    <slash:comments>4</slash:comments>
    <wfw:commentRss>http://coffeecode.net/rss.php?version=2.0&amp;type=comments&amp;cid=84</wfw:commentRss>
    

    <author>dan@coffeecode.net (Dan Scott)</author>
    <content:encoded>
    &lt;p&gt;A couple of recent examples in the PHP community have reaffirmed my faith in the open source development model: the PEAR proposal process, and the delay in the 5.2.0 release.&lt;/p&gt;
 &lt;br /&gt;&lt;a href=&quot;http://coffeecode.net/archives/84-Why-open-source-works....html#extended&quot;&gt;Continue reading &quot;Why open source works...&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Tue, 19 Sep 2006 18:56:24 -0400</pubDate>
    <guid isPermaLink="false">http://coffeecode.net/archives/84-guid.html</guid>
    
</item>
<item>
    <title>File_MARC and Structure_Linked_List: new alpha releases</title>
    <link>http://coffeecode.net/archives/81-File_MARC-and-Structure_Linked_List-new-alpha-releases.html</link>
            <category>Coding</category>
            <category>PHP</category>
    
    <comments>http://coffeecode.net/archives/81-File_MARC-and-Structure_Linked_List-new-alpha-releases.html#comments</comments>
    <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=81</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://coffeecode.net/rss.php?version=2.0&amp;type=comments&amp;cid=81</wfw:commentRss>
    

    <author>dan@coffeecode.net (Dan Scott)</author>
    <content:encoded>
    &lt;p&gt;Earlier in the month I asked for feedback on the &lt;a href=&quot;http://coffeecode.net/archives/78-Super-alpha-MARC-package-for-PHP-comments-requested.html&quot;&gt;super-alpha MARC package&lt;/a&gt; for PHP. Most of the responses I received were along the lines of &quot;Sounds great!&quot; but there hasn&#039;t been much in the way of real suggestions for improvement. In the mean time, I&#039;ve figured out (with &lt;a href=&quot;http://pooteeweet.org&quot;&gt;Lukas&lt;/a&gt; and &lt;a href=&quot;http://blog.thepimp.net&quot;&gt;Pierre&#039;s&lt;/a&gt; assistance, &lt;em&gt;merci beaucoup&lt;/em&gt;) how to make use of PEAR::ErrorStack for error handling. I&#039;ve also decided to split my linked-list-in-PHP implementation into a separate package; first, because it might be useful for someone else; second, because as a separate package the PHP gurus that care deeply about things like returning references can go over it with a fine-toothed comb without having to worry about all of the MARC stuff.&lt;/p&gt;
&lt;p&gt;So, once again I&#039;m interested in your comments -- but this time I&#039;m looking for comments on two different packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://marc.coffeecode.net/Link/&quot;&gt;Structure_Linked_List&lt;/a&gt; - implements a doubly-linked list&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://marc.coffeecode.net/&quot;&gt;File_MARC&lt;/a&gt; - reads and generates MARC formatted records&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Next steps are to build real PEAR packages for these beasties and put together PEAR proposals for consideration of the community... but don&#039;t feel that you have to wait until the proposal to offer any suggestions!
&lt;/p&gt;
&lt;p&gt;
I will put up &lt;strong&gt;.phps&lt;/strong&gt; versions of the examples for each package, but for some reason I&#039;m having problems getting my host to accept my .htaccess file... look for an update on the respective pages after I contact my hosting support team.
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Fri, 25 Aug 2006 17:52:54 -0400</pubDate>
    <guid isPermaLink="false">http://coffeecode.net/archives/81-guid.html</guid>
    
</item>
<item>
    <title>Super-alpha MARC package for PHP: comments requested</title>
    <link>http://coffeecode.net/archives/78-Super-alpha-MARC-package-for-PHP-comments-requested.html</link>
            <category>Coding</category>
            <category>PHP</category>
    
    <comments>http://coffeecode.net/archives/78-Super-alpha-MARC-package-for-PHP-comments-requested.html#comments</comments>
    <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=78</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://coffeecode.net/rss.php?version=2.0&amp;type=comments&amp;cid=78</wfw:commentRss>
    

    <author>dan@coffeecode.net (Dan Scott)</author>
    <content:encoded>
    &lt;p&gt;Okay, I&#039;ve been working on &lt;a href=&quot;http://marc.coffeecode.net&quot;&gt;this project&lt;/a&gt; (let&#039;s call it PEAR_MARC, although it&#039;s not an official PEAR project yet) in my spare moments over the past month or two. It&#039;s a new PHP package for working with MARC records. The package tries to follow the &lt;a href=&quot;http://pear.php.net&quot;&gt;PEAR project&lt;/a&gt; standards (coding, documentation, error handlers, etc) in the hopes that, when I put a proposal forward, it will be accepted as a true PEAR package. For now, I&#039;m most interested in getting feedback from coders for libraries on the usability of the API that I&#039;ve designed -- is it easy enough to use and does it offer the functionality that you require for your day-to-day work?&lt;/p&gt;
&lt;p&gt;The core MARC decoding routine was taken from the &lt;a href=&quot;http://php-marc.sf.net&quot;&gt;php-marc&lt;/a&gt; package that Christoffer Landtman coded for the &lt;a href=&quot;http://emilda.org&quot;&gt;Emilda&lt;/a&gt; open source library management system. The decoding routine was based on the algorithm contained in Perl&#039;s MARC::Record package. Christoffer generously relicensed php-marc under an LGPL license so that I could use it as the basis of a (hopefully, eventually) official PEAR package. PEAR_MARC itself will therefore be licensed under LGPL.&lt;/p&gt;
&lt;p&gt;Some of the major differences that users will see between php-marc and PEAR_MARC are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;System requirements: php-marc requires PHP 4 or 5, while PEAR_MARC requires PHP 5 due to my desire to offer a relatively clean OO structure.&lt;/li&gt;
&lt;li&gt;API: php-marc was based closely on Perl&#039;s MARC::Record API, while with PEAR_MARC I&#039;ve created a new API from the ground up that is hopefully cleaner, more intuitive where possible, and more transparent where necessary&lt;/li&gt;
&lt;li&gt;Class hierarchy: php-marc offers one major class that contained all of the methods, with different subclasses used as constructors for different MARC sources (files, strings, &lt;a href=&quot;http://php.net/yaz&quot;&gt;YAZ&lt;/a&gt;). PEAR_MARC is designed with different classes representing subfields, data fields, control fields, and entire records, with just one class representing all MARC sources.&lt;/li&gt;
&lt;li&gt;Functionality: php-marc fields and subfields are based on arrays, which results in some interesting limitations (for example, when you add a subfield in php-marc it is always added to the end of the existing subfields). PEAR_MARC is based on a linked list structure, which enables the user to add fields and subfields at any point in the list.&lt;/li&gt;
&lt;li&gt;Error handling: php-marc implemented warn() and croak() methods as a clone of Perl&#039;s API. PEAR::MARC relies on PEAR_ErrorStack as a standard that conforms to the PEAR project requirements.&lt;/li&gt;
&lt;li&gt;Performance: php-marc offers a class, MARC_Index, that claims to be incredibly fast but which can only be used for read-only operations. I haven&#039;t benchmarked PEAR_MARC yet, but I have to assume that it will appear sluggish for read-only operations and would probably lag php-marc in performance for operations that add, modify, or delete subfields. It might be possible to create a class similar to MARC_Index that offers read-only operations with the same API as PEAR_MARC and simply make it an option passed in to the constructor. At this point... not a priority.&lt;/li&gt;
&lt;li&gt;Tests: PEAR_MARC includes a number of unit tests that have already been helpful in ensuring that the classes operate correctly. php-marc currently offers no unit test suite; however, it is used in production by emilda so it is arguably well-tested in practice &lt;img src=&quot;http://coffeecode.net/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can find the latest version of the PEAR_MARC package posted at &lt;a href=&quot;http://marc.coffeecode.net&quot;&gt;http://marc.coffeecode.net&lt;/a&gt;. Please append any comments as replies to this post, or email me at &lt;a href=&quot;mailto:dan@coffeecode.net&quot;&gt;dan@coffeecode.net&lt;/a&gt;.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 14 Aug 2006 14:23:57 -0400</pubDate>
    <guid isPermaLink="false">http://coffeecode.net/archives/78-guid.html</guid>
    
</item>
<item>
    <title>In-depth _and_ official DB2 and PHP documentation</title>
    <link>http://coffeecode.net/archives/68-In-depth-_and_-official-DB2-and-PHP-documentation.html</link>
            <category>DB2</category>
            <category>PHP</category>
    
    <comments>http://coffeecode.net/archives/68-In-depth-_and_-official-DB2-and-PHP-documentation.html#comments</comments>
    <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=68</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://coffeecode.net/rss.php?version=2.0&amp;type=comments&amp;cid=68</wfw:commentRss>
    

    <author>dan@coffeecode.net (Dan Scott)</author>
    <content:encoded>
    &lt;p&gt;
I should have mentioned this before, but now that I noticed Chris Jones&#039; post on the &lt;a href=&quot;http://blogs.oracle.com/opal/2006/06/12#a39&quot;&gt;Underground PHP and Oracle Manual&lt;/a&gt;, I felt obliged to point out that one of the final fruits of my labours at IBM is now visible in the DB2 &quot;Viper&quot; Information Center -- a &lt;a href=&quot;http://publib.boulder.ibm.com/infocenter/db2luw/v9/topic/com.ibm.db2.udb.apdv.php.doc/doc/c0021523.htm&quot;&gt;set of task-oriented documentation&lt;/a&gt; that describes how to do all of the things that you really need to do with DB2 and PHP, using either the &lt;a href=&quot;http://php.net/ibm_db2&quot;&gt;ibm_db2&lt;/a&gt; or &lt;a href=&quot;http://php.net/pdo_odbc&quot;&gt;PDO_ODBC&lt;/a&gt; modules.
&lt;/p&gt;
&lt;p&gt;
By &quot;task-oriented&quot; I mean that, instead of documenting a set of objects and methods, the docs take the perspective of a developer and describe how to accomplish specific tasks (like &quot;Connecting to a DB2 database from PDO&quot; or &quot;Calling a stored procedure&quot; or &quot;Retrieving multiple result sets&quot;). I hope it works as both a good introduction to PHP development for DB2 users, and a good introduction to DB2 for PHP developers. And, of course, the same approach will work for Apache Derby databases as well.
&lt;/p&gt;
&lt;p&gt;
I find it interesting that Oracle has positioned their PHP documentation as &quot;underground&quot;, while IBM has chosen to incorporate their PHP documentation into their official set of DB2 documentation. Oracle gets the points for coolness, but IBM&#039;s approach will make the pointy-headed types a bit more comfortable.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ok, one qualification: this is the DB2 Viper beta 1 documentation, so calling it &quot;official&quot; is a tad premature... but you get my drift. An example of the beta-ness of these docs is the table of contents entry for &lt;strong&gt;Executing XQuery expressions&lt;/strong&gt; that remains tantalizingly empty... hmm, might it have anything to do with &lt;a href=&quot;http://cvs.php.net/viewcvs.cgi/pecl/ibm_db2/ibm_db2.c?r1=1.48&amp;amp;r2=1.49&quot;&gt;this CVS commit&lt;/a&gt;?&lt;/li&gt;
&lt;li&gt;Second qualification: I can&#039;t take full credit for the PHP docs in the DB2 manual, because they weren&#039;t frozen by the time I left IBM. And the DB2-related reference documentation from php.net has been incorporated into the DB2 manual, which represents the efforts of php.net doc writers as well. But I&#039;ll certainly take credit for any errors &lt;img src=&quot;http://coffeecode.net/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Corrected bad XHTML (unescaped ampersand in URL). Bad Dan. And corrupted an intermediate version with garbage from another posting. Even worse.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 13 Jun 2006 08:40:06 -0400</pubDate>
    <guid isPermaLink="false">http://coffeecode.net/archives/68-guid.html</guid>
    
</item>
<item>
    <title>Some apologies, some reassurances</title>
    <link>http://coffeecode.net/archives/44-Some-apologies,-some-reassurances.html</link>
            <category>PHP</category>
    
    <comments>http://coffeecode.net/archives/44-Some-apologies,-some-reassurances.html#comments</comments>
    <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=44</wfw:comment>

    <slash:comments>4</slash:comments>
    <wfw:commentRss>http://coffeecode.net/rss.php?version=2.0&amp;type=comments&amp;cid=44</wfw:commentRss>
    

    <author>dan@coffeecode.net (Dan Scott)</author>
    <content:encoded>
    &lt;p&gt;
As I mentioned in a &lt;a href=&quot;http://coffeecode.net/archives/43-ibm_db2-close.html&quot;&gt;previous post&lt;/a&gt;, I&#039;m leaving IBM for a new opportunity at Laurentian University. Over the past year and a half a lot of my personal and professional effort has gone into the PHP community: contributing documentation, acting as the release lead for the ibm_db2 and PDO_INFORMIX extensions, giving conference sessions, and writing the occasional article.
&lt;/p&gt;
&lt;p&gt;
When I made the decision to leave IBM, I also had to back down from some related commitments that I had made (formally and informally) to a few different people and groups. I want to apologize publically for letting you down, and hope that you&#039;ll forgive me:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://oscms-summit.org&quot;&gt;Open Source Content Management Summit (OSCMS)&lt;/a&gt;: I was going to give a nice update on my database portability talk, focusing on the experiences I&#039;ve had in trying to port &lt;a href=&quot;http://s9y.org&quot;&gt;Serendipity&lt;/a&gt; to run on DB2. Unfortunately, once I decided to leave IBM I couldn&#039;t justify sticking Big Blue with the travel and accomodations costs for flying out to Vancouver, so I had to back out of OSCMS with just a few weeks&#039; notice. I felt really, really bad about that.&lt;/li&gt;
&lt;li&gt;Speaking of &lt;a href=&quot;http://s9y.org&quot;&gt;Serendipity&lt;/a&gt;, I still owe Gavin &lt;a href=&quot;http://sourceforge.net/mailarchive/forum.php?thread_id=9555380&amp;amp;forum_id=31275&quot;&gt;that patch&lt;/a&gt; for enabling DB2... I&#039;ll find the time one of these evenings!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://conf.phpquebec.org&quot;&gt;PHP Quebec&lt;/a&gt;: I was going to give a couple of talks at PHP Quebec in March, and was really looking forward to the conference given the trip reports and pictorial evidence from the last couple of years. However, it falls in the middle of the week. Worse, for me, it will be the third week at my new job, and while I expect Laurentian University to be a very understanding employer, my focus for the first few months has to be on learning the culture and challenges of my new position.&lt;/li&gt;
&lt;li&gt;An article here or there on DB2 and PHP: it made more sense to help get other IBMers involved and visible in the community, which meant handing off plans for an article to a different writer (and consequently blowing at least one publication schedule). I apologized in private for this at the time, but want to apologize publically as well. You know who you are...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Now, a few of you have wondered on IRC whether this means the end of my contributions to the PHP community... the answer is an emphatic *heck no*! First of all, my new position will give me some latitude in deciding upon the technologies we use to solve the problems we face, and the Library is already using PHP... so we&#039;re likely to continue to use it. And on a personal level, there are a number of projects that I want to continue to be involved with:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PHP Data Objects (PDO): the basic &lt;a href=&quot;http://php.net/pdo&quot;&gt;documentation&lt;/a&gt; is in decent shape, but I have some catching up to do on new features, some examples to add, and some driver-specific documentation to add. I&#039;ll actually be in a better position to document it in my new role.&lt;/li&gt;
&lt;li&gt;PDO_ODBC: I noticed some significant regressions in the PDO_ODBC driver between the 5.1.0 and 5.1.1 releases that the 5.1.2 release did not address. Given that the &lt;a href=&quot;http://php.net/ibm_db2&quot;&gt;ibm_db2&lt;/a&gt; driver is written in DB2 CLI, a very close cousin to ODBC, I&#039;m sure that with a few hours of investigation I can submit some patches for PDO_ODBC that will get the 5.1.3 release back on track. Oh yeah, and I have motivation to make sure this works because that &lt;a href=&quot;http://coffeecode.net/archives/26-Apache-Derby-Off-to-the-Races-in-the-paper-flesh!.html&quot;&gt;book I co-authored&lt;/a&gt; contains a chapter on PDO_ODBC...&lt;/li&gt;
&lt;li&gt;Documentation in general: I still need some outlets for technical writing, so I plan to keep an eye on the phpdoc project and contribute to the tools and docs where it makes the most sense.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
So I&#039;ll still be around; you just won&#039;t see me at the conferences this year, and I&#039;ll probably be even less productive over the next few months than normal as I adjust to the new role at the University. Oh, not to mention my new role as a father, which I am also expected to take on in a few months. But over time, I&#039;m sure you&#039;ll hear more from me, and you&#039;ll start seeing submissions for conferences and articles grounded in my experiences at the library.
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 27 Feb 2006 12:18:29 -0500</pubDate>
    <guid isPermaLink="false">http://coffeecode.net/archives/44-guid.html</guid>
    
</item>
<item>
    <title>ADOdb: getting good support for IBM DB2, Cloudscape, and Apache Derby</title>
    <link>http://coffeecode.net/archives/37-ADOdb-getting-good-support-for-IBM-DB2,-Cloudscape,-and-Apache-Derby.html</link>
            <category>DB2</category>
            <category>PHP</category>
    
    <comments>http://coffeecode.net/archives/37-ADOdb-getting-good-support-for-IBM-DB2,-Cloudscape,-and-Apache-Derby.html#comments</comments>
    <wfw:comment>http://coffeecode.net/wfwcomment.php?cid=37</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://coffeecode.net/rss.php?version=2.0&amp;type=comments&amp;cid=37</wfw:commentRss>
    

    <author>dan@coffeecode.net (Dan Scott)</author>
    <content:encoded>
    &lt;p&gt;
The stable release of the &lt;a href=&quot;http://php.net/ibm_db2&quot;&gt;ibm_db2&lt;/a&gt; PECL extension for IBM DB2, Cloudscape, and Apache Derby brought a high performing, highly functional database connectivity alternative to Unified ODBC for PHP 4 and 5 users. However, in and of itself a database extension does not enable you to use the many PHP applications that you might want to use. You either have to add a specific driver for each application that implements its own portability layer (such as &lt;a href=&quot;http://phpmyfaq.de&quot;&gt;phpMyFAQ&lt;/a&gt;), or if the application relies on one of the standard database abstraction layers (&lt;a href=&quot;http://pear.php.net/package/DB&quot;&gt;PEAR DB&lt;/a&gt;, &lt;a href=&quot;http://pear.php.net/package/MDB2&quot;&gt;MDB2&lt;/a&gt;, or &lt;a href=&quot;http://adodb.sourceforge.net/&quot;&gt;ADOdb&lt;/a&gt;), then a driver needs to be added to the corresponding database abstraction layer.
&lt;/p&gt;
&lt;p&gt;
To date, the standard database abstraction layers have offered support for DB2 only through the Unified ODBC extension (and despite substantial overlap in names, MDB2 does not offer support for DB2 at all). Due to some limitations of the Unified ODBC extension, access to DB2 would seem slow and buggy -- and access to Apache Derby or Cloudscape would be frought with minefields, as Unified ODBC does not provide a way of differentiating between the databases to which you are connected and their corresponding features. The ibm_db2 extension offers the &lt;a href=&quot;http://php.net/db2-server-info&quot;&gt;db2_server_info()&lt;/a&gt; function which can tell you whether you are connected to DB2 on Linux, DB2 on a zSeries machine, or an Apache Derby database, and let your application or database abstraction layer perform the appropriate workarounds.
&lt;/p&gt;
&lt;p&gt;
Now, however, as part of Larry Menard&#039;s efforts to enable &lt;a href=&quot;http://gallery.menalto.com&quot;&gt;Gallery 2&lt;/a&gt;, an &lt;a href=&quot;http://phplens.com/lens/lensforum/msgs.php?id=14602&quot;&gt;ADOdb driver built on top of the ibm_db2 extension&lt;/a&gt; will, in all probability, be made available as part of a future ADOdb release. Undoubtedly there will be further testing to do, and tweaks and performance optimizations in the future code--for example, differentiating between the capabilities of Apache Derby and DB2--but this is a huge first step! Thanks to Larry and the Gallery 2 team for making this contribution.
&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Fri, 10 Feb 2006 09:36:57 -0500</pubDate>
    <guid isPermaLink="false">http://coffeecode.net/archives/37-guid.html</guid>
    
</item>

</channel>
</rss>