<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
   <channel>
      <title>academe 2.0</title>
      <link>http://blog.lib.umn.edu/fenne035/academe2.0/</link>
      <description>Scholarly Community + Web + General Geekery</description>
      <language>en</language>
      <copyright>Copyright 2009</copyright>
      <lastBuildDate>Sat, 10 May 2008 05:52:14 +0000</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/?v=4.25</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

      
      <item>
	
         <title>&quot;Live from Minnesota&quot;, Drupal Search Sprint 2008</title>
         <description><![CDATA[<p>Just winding down now from a long day of thinking about and working on Drupal search, I thought I spend five minutes jotting down a few impressions.  </p>

<h2>The People</h2>
<a href="http://drupal.org/user/5449">Robert Douglass</a>, <a href="http://drupal.org/user/24450">Blake Lucchesi</a>, <a href="http://drupal.org/user/9170">Djun Kim</a>, <a href="http://drupal.org/user/17157">David Lesieur</a>,  <a href="http://drupal.org/user/23325">Earnest Berry</a>, and <a href="http://drupal.org/user/29191">Doug Green</a> and <a href="http://drupal.org/user/10297">Yours Truly</a>

<p>I'm almost starting to take for granted the fact that Drupal will be sending the University of Minnesota Libraries a handful of authentically brilliant and unusually good-natured developers to visit, this being our <a href="http://buytaert.net/drupal-usability-testing">second</a> high-profile Drupal project.  But yeah, we're "Live from Minnesota" as <a href="http://www.civicactions.com/blog/search_sprint_day_one">Doug Green</a> points out (I like the meme, no doubt).  </p>

<h2>The Work</h2>
Like a lot of efforts underway in Drupal, search is moving towards a more extensible model by way of a core API.  This shift has me excited for a number of reasons, but mostly due to my interest in the <a href="http://www.slideshare.net/libsys/dlf-h-choice-2008-04/">Drupal/Solr</a> combo within the context of academic research environments.  By decoupling the search and indexing processes from a specific database implementation,  we open the door to a whole new ecosystem of search utilities.

<p>If all goes well with the new search API, I believe it won't be long before we start seeing <a href=http://reviews.cnet.com/televisions/?tag=img.tv">c|net style</a> faceted drill-down e-commerce sites in Drupal.  We already have a well laid-out <a href="http://drupal.org/project/apachesolr">Apache Solr Module</a>, but a search API will provide more granular control, better integration with core search and ease the long-term burden of maintenance on Robert by moving portions of his code into core.</p>

<p>Personally, this is a chance for me to really think deeply about how to best harness the wonderful work of Doug Green and others within the context of core search features, especially as regards Solr integration.  On an even more practical level, this is my own little <a href="http://www.lullabot.com/articles/introduction-unit-testing">unit testing</a> bootcamp as I help to write tests for the work being done here this weekend.  </p>

<p>Off to bed and on to day two.</p>]]></description>
         <link>http://blog.lib.umn.edu/fenne035/academe2.0/2008/05/live_from_minnesota_drupal_sea.html</link>
         <guid>http://blog.lib.umn.edu/fenne035/academe2.0/2008/05/live_from_minnesota_drupal_sea.html</guid>
         <category></category>
         <pubDate>Sat, 10 May 2008 05:52:14 +0000</pubDate>
      </item>
      
      <item>
	<enclosure url="http://static.slideshare.net/swf/logo_embd.png" length="2418" type="image/png" />
         <title>Drupal, Solr, GeoNetwork and GeoServer at DLF</title>
         <description><![CDATA[<div style="width:425px;text-align:left" id="__ss_395310"><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=dlfhchoice200804-1210288217580158-9"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=dlfhchoice200804-1210288217580158-9" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"><a href="http://www.slideshare.net/?src=embed"><img src="http://static.slideshare.net/swf/logo_embd.png" style="border:0px none;margin-bottom:-5px" alt="SlideShare"/></a> | <a href="http://www.slideshare.net/libsys/dlf-h-choice-2008-04?src=embed" title="View 'DLF 2008 Spring Forum  - HarvestChoice' on SlideShare">View</a> | <a href="http://www.slideshare.net/upload?src=embed">Upload your own</a></div></div>

<p>Presented at the <a href="http://www.diglib.org/forums/spring2008/index.htm">Digital Library Federation Spring Forum 2008</a></p>]]></description>
         <link>http://blog.lib.umn.edu/fenne035/academe2.0/2008/05/drupal_solr_geonetwork_and_geo.html</link>
         <guid>http://blog.lib.umn.edu/fenne035/academe2.0/2008/05/drupal_solr_geonetwork_and_geo.html</guid>
         <category>Solr</category>
         <pubDate>Sat, 10 May 2008 05:40:23 +0000</pubDate>
      </item>
      
      <item>
	
         <title>Drupalcon 2008: Dev, Stage, Build!</title>
         <description><![CDATA[<p>This morning I attended a session titled <a href="http://boston2008.drupalcon.org/session/drupalcon-tutorial-best-practices-development-environments-staging-build-management-and-prod">Best practices in development environments, staging, build management, and production environments</a>.   In terms of practical importance, this may have been the most valuable session for me.  Here are a few highlights of the panel discussion (by topic).</p>

<h3>Development, Staging and Production Environments - Source Code Control</h3>
Most large-scale shops use quite an array of systems utilities to manage (a) their Drupal/PHP code, (b) databases and (c) uploaded/user-contributed files.  All shops represented on the panel made use of Subversion for source control.  

<p>One panel member (Neil Giarratana of <a href="http://www.lucidus.net/">Lucidus</a>) actually lives down the street from a lead engineer at Subversion and has had dinner with him a couple of times to chat about potential "best practices" for a Drupal shop.  The result of these conversations was a pretty straight-forward Subversion folder setup: httpdocs, docs (project documentation) and dbdumps (MySQL  db dumps) - all three of these folders being replicated on a per-project basis.  What is interesting about this practice (to me) is that they avoid using the conventional the conventional branch, trunk, tree setup.  The Subversion developer made the case that these conventions are used primarily when you need to collaborate with a large community of people and that they don't make a heck of a lot of sense for internal projects. Neil's gang push out all updates via checkout to there prod, staging and dev environments.</p>

<p>Another Drupal shop, <a href="http://advomatic.com/">Advomatic</a> (a very, very compitent bunch) check out Drupal core from CVS and then check that into subversion.  They then have separate "sites' folders for each project.  In Drupal, virtually 100% of unique coding happens in the sites folder, so this makes a lot of sense to me.</p>

<h3>Automated Deployments</h3>

<p>The <a href="http://osuosl.org/">OSU Open Source Labs</a> (where Drupal.org is hosted), have adopted the <a href="http://www.cfengine.org/">Cfengine</a> configuration engine to automate their deployment process. Cfengine basically provides systems administrators with an Object-Oriented language that allows the to set constraints on pretty much any kind of server configuration.  These can be pushed out to multiple machines and can also do things like allow for single command deployment of complex server environments.  It sounds really great, but apparently Cfengine is a major pain to get up and running and has a fairly high learning curve.  Narayan Newton (OSUOSL) said "We would not be able to administer our systems with our staffing numbers without Cfengine."</p>

<h3>Code vs Content Migrations</h3>

<p>Content Migration: basically, it's ugly (for now).  There have been various efforts to clean this process up in Drupal, but it's still not quite there yet.  The key is to backup and have a very clearly articulated rollback policy/practice.   If Dries has his way, Drupal 7 will be RDF compliant and this issue will more or less go away.  Not only will you be able to easily migrate content, external content will (theoretically) be easy to feature in real-time in any Drupal installation.</p>

<p>Most shops either use rsync and/or straight-up tarbals to deploy code from staging to production.  Some also deploy directly from svn checkouts.</p>

<h3>QA Best Practices</h3>

<p>Neil Giarratana started with an interesting point: automated load testing is of limited interest to his shop.  They are pretty familiar with Drupal performance issues, for the most part.  Lucidus has a full time QA person that does a great deal of manual functional testing (clicking through the UI), and that is their chief method of finding issues.  Neil said the most important thing that they have learned is to have clear and standardized communication processes set up for their customers: indicate (a) when upgrades will happen, (b) when they are actually happening, (c) your fallback plan (in detail), (d) when you are done with the upgrade...for example.  He mentioned a Cisco paper on this topic (no reference yet...I need to Call the Science and Engineering Library and have them help me dig it up!).</p>

<p>Other shops do take advantage of automated tools such as <a href="http://code.google.com/p/firewatir/">Watir + firewatir</a> (Ruby-based) and Firewater for functional testing.  The good news, IMHO,  is that <a href="http://en.wikipedia.org/wiki/Unit_testing">unit tests</a>  AND <a href="http://www.ibm.com/developerworks/library/j-test.html#h1">functional tests</a> will become standard practice in Drupal core; Dries proposed this change in his keynote yesterday.  This announcement brought cheers from some core developers, particularly as Dries indicated that unit testing would allow for a much more compressed code freeze period, which would leave more time for active development, new features, etc.</p>

<h3>Eliminating (uh, Reducing) Unscheduled Down-Time</h3>

<p>One of the more interesting comments concerned *testing* backups.  Advomatic apparently had, at one point, made backups of a site that had an exceedingly large sessions table (implementation issue).  It was in the millions of records and caused the recovery process to go quite slowly when they did need to recover from a system failure.  If they had tested their backups occasionally, they would have caught this problem and corrected it ahead of time. </p>

<p>At least a couple of the shops on the panel make use of systems monitoring applications like <a href="http://www.nagios.org/">Nagios</a> and <a href="http://www.cacti.net/">Cacti</a>.  These sorts of tools can provide 'forensic evidence' for systems failures, for example.</p>]]></description>
         <link>http://blog.lib.umn.edu/fenne035/academe2.0/2008/03/drupalcon_2008_dev_stage_build.html</link>
         <guid>http://blog.lib.umn.edu/fenne035/academe2.0/2008/03/drupalcon_2008_dev_stage_build.html</guid>
         <category></category>
         <pubDate>Tue, 04 Mar 2008 18:34:54 +0000</pubDate>
      </item>
      
      <item>
	
         <title>Drupalcon Update #1</title>
         <description><![CDATA[<p>I'll be posting updates here periodically this week, hopefully, without a lot of heavy editing.  </p>

<p>We just heard Dries' "State of Drupal" keynote.  Here are a couple of things that I found very interesting.</p>

<p><b>Better APIs in Core</b><br />
Drupal will, among other things, place a high level of focus upon improving internal and external APIs.  For starters, Dries would like to see good (and scalable/fast) support for RDF.  This would exist on two levels:  (1) how Drupal stores data in general and (2) within the more specific context of RDF triples.  The latter would provide for extreme flexibility in terms of creating relationships between system objects.  To make the system even more flexible, Dries is suggesting that we raise CCK fields to "first class" object level, rather than at the node level.  We could, therefore build n number of relations between field-level objects.  It could hardly be any more flexible.</p>

<p>For general storage, this means the Drupal would instantly become compatible with hundreds (thousands?) of external repositories (ex GeoNames) - all repositories that can output to RDF.  As Dries is also promoting other formats as JSON, that number goes up even more dramatically (ex Google Spreadsheets can output to JSON).  </p>

<p><b>User Experience</b><br />
Dries put Usability Testing on the top 11 keys to a "Killer Release" of Drupal 7.  I guess his <a href="http://buytaert.net/drupal-usability-testing">experience at the U of M Libraries</a> was a good one!  It's exciting to be part of Drupal's future.</p>]]></description>
         <link>http://blog.lib.umn.edu/fenne035/academe2.0/2008/03/drupalcon_update_1.html</link>
         <guid>http://blog.lib.umn.edu/fenne035/academe2.0/2008/03/drupalcon_update_1.html</guid>
         <category></category>
         <pubDate>Mon, 03 Mar 2008 17:29:56 +0000</pubDate>
      </item>
      
      <item>
	
         <title>Adoby Flex Testing 1,2,3</title>
         <description><![CDATA[<p>Just tinkering with the recently open sourced Adobe Flex platform.  There is a lot of potential here for developing data-intensive rich internet applications (RIA) with this platform.  </p>

<p>Why are people interested in Flex? One of the other developers in the U Libraries pointed me to <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=193593">Bruce Eckel's article on RIAs and Flex</a>, as an example of how developers are beginning to see this technology.</p>

<p>I like Flex for creating bomb-proof, embeddable and highly interactive widgets; backend administrative interfaces; and the possibility of building cross-platform desktop applications that can easily speak to web-based applications.  There are still plenty of things that Javascript would solve more easily and more elegantly, I should add.  One always has to be very careful when purchasing a big hammar.</p>

<p>And, being the agile community that it is,  Drupal is already on it with  <a href="http://groups.drupal.org/node/2768">tutorials</a>, <a href="http://drupal.org/project/amfphp">modules</a>,  <a href="http://www.lullabot.com/audiocast/drupal_podcast_no_34_scott_nelson_services_and_amfphp">podcasts</a> and <a href="http://drupal.org/node/144143">screencasts</a>.  </p>

<p>The following, very, very crude example was derived from the tutorial resources listed above as I modified code presented there to create what follows - not much time in my schedule to say more here, but this definitely has got me thinking....</p>

<center><iframe name="images" frameborder="0" scrolling="no" height="350" width="400" src="http://webdev.dewey.lib.umn.edu//test/flex/ImageGallery.html" iframe>
</iframe></center>

<p><br />
More information at <a href="http://www.adobe.com/products/flex/">Adobe</a> - and check out their <a href="http://www.adobe.com/macromedia/accessibility/features/flex/">Accessability Page</a> (I'd like to dig more deeply into this aspect).</p>]]></description>
         <link>http://blog.lib.umn.edu/fenne035/academe2.0/2007/10/flex_test_123.html</link>
         <guid>http://blog.lib.umn.edu/fenne035/academe2.0/2007/10/flex_test_123.html</guid>
         <category></category>
         <pubDate>Fri, 26 Oct 2007 14:43:31 +0000</pubDate>
      </item>
      
      <item>
	
         <title>Drupalcon 2007 - Day One</title>
         <description><![CDATA[<p>This is the first in a series of posts of my notes from <a href="http://barcelona2007.drupalcon.org/">Drupalcon 2007 Barcelona</a>.  My note taking more or less petered out the last couple of days for various reasons, so the following is about as long as these posts are going to get.</p>
<p>
Apart from what I learned in the seemingly endless stream of useful sessions, by attending a Drupalcon I realized just how much of Drupal is locked up in the heads of core maintainers.  That is not a criticism of the project, it's just a fact of life.  It's also a case study on why "knowledge management" is so hard. Even when you have the tools (Drupal), capturing knowledge is as hard as effectively representing it to users, and that's not an easy thing.  It's also a reason why developers interested in utilizing the platform should seriously consider attending the conference.  I found the community to be open-minded, tolerant of newbies and full of brilliant people.  An especially effective tactic, I've found, is to corner a developer over a pint.
</p>
<p>
With that, here's what I learned in school:
</p>
<div class="omnioutliner">
<ul>
  <li class="row0"> <b>Form API - Jeff Eaton</b>
  <ul>
    <li class="row1"> <i>Noteworthy Hooks</i>
    <ul>

      <li class="row0"> <i>hook_elements</i> (core)- &quot;Allows modules to declare their own form element types and specify their default values.&quot;
      <ul>
        <li class="row1"> <a href="http://api.drupal.org/?q=api/file/developer/examples/example_element.module/5"> Hook Documentation</a></li>
        <li class="row0"> Allows developers to craft complex form elements (ex an address field)</li>

        <li class="row1"> great for (AHAH) powered form elements (ex FiveStar)</li>
      </ul>
      </li>
    </ul>
    </li>
    <li class="row0"> <i>Changes to Form API in D6</i>
    <ul>

      <li class="row1"> $op is dead
      <ul>
        <li class="row0"> New API decouples form processing from submit button text (thank god)</li>
        <li class="row1"> Now, every single button can have its own submit/validation handlers (ex a preview only builds a preview</li>
        <li class="row0"> Image buttons now possible as well as a result</li>
      </ul>

      </li>
      <li class="row1"> In hook_form_alter you can also now change a submit button to an image</li>
      <li class="row0"> Buttons can have new AHAH-properties - ex adding new fields (AHAH)</li>
      <li class="row1"> Form State
      <ul>
        <li class="row0"> Forms now (in D6) can store data based on which state (aka step) it is in and move users to other steps, where they will have access to this data</li>

        <li class="row1"> You used to have to embed this into &quot;fake&quot; form fields (ex you could validate and pass form state along to next step)</li>
        <li class="row0"> Multi-step forms are now properly supported
        <ul>
          <li class="row1"> There is no more special &quot;multi-state&quot; form - all forms are inherently multi-step</li>

          <li class="row0"> Set form state to &#39;rebuild&#39;
          <ul>
            <li class="row1"> can trigger this anywhere and the form will just reset to any given step</li>
          </ul>
          </li>
          <li class="row0"> Cached data: you can, for example, allow users to fill out a form one stage at a time</li>

        </ul>
        </li>
      </ul>
      </li>
    </ul>
    </li>
  </ul>
  </li>
  <li class="row1"> <b>Connecting to External Data Sources - Ken Rickard (<a href="http://therickards.com/">http://therickards.com/</a>)</b>

  <ul>
    <li class="row0"> Utilizes the settings.php file&#39;s DB config options
    <ul>
      <li class="row1"> Can add a array for external db settings</li>
    </ul>
    </li>
    <li class="row0"> You then use the db_set_active() function in your moduule to connect external DB
    <ul>

      <li class="row1"> It&#39;s best to reset to default database connection after you get the data</li>
    </ul>
    </li>
    <li class="row0"> You can turn results from external DB queries  into nodes when you need them to be (ie &quot;lazy instanciation&quot; )
    <ul>
      <li class="row1"> I used &quot;lazy instantiation&quot; on the EthicShare project w/out knowing the name - used in the module that allows users to post citations to groups.  Citation data posted to discussion groups is updated only when it is edited to keep load on the DB to a minimum.</li>

    </ul>
    </li>
    <li class="row0"> You can&#39;t connect to multiple database types using this method - you get name space collisions if you want to connect to mysql and pg</li>
    <li class="row1"> Always cache the data for external sources (particularly important if you&#39;re writing for a block)
    <ul>
      <li class="row0"> Do this with cache_set() as per usual</li>

      <li class="row1"> I wonder if there might be cases where caching is not useful.
      <ul>
        <li class="row0"> For example, we use Solr (not an external DB but an external data provider nonetheless).  Solr is *extremely* fast, probably faster than Drupal&#39;s DB-based caching mechanism, particularly on very large sites.</li>
      </ul>
      </li>
    </ul>
    </li>

    <li class="row1"> Use hook_search(), hook_search_display() to tie search results into Drupal&#39;s search mechanism
    <ul>
      <li class="row0"> Is there a potential for a performance hit on Solr results?</li>
    </ul>
    </li>
    <li class="row1"> Use drupal_execute() to submit a form progromatically</li>

    <li class="row0"> Check out Yahoo Pipes - wow, this is a very, very cool set of search tools.</li>
  </ul>
  </li>
  <li class="row1"> <b>Image Handling in Core...for real this time - James Walker (aka &quot;walka&quot;)</b>
  <ul>
    <li class="row0"> There are about 8 billion image-handling modules.  So, there is a strong desire among the community to select key functionality from among these modules, integrate them and embed them into core.</li>

    <li class="row1"> A good deal of discussion is ongoing over whether or not images (and perhaps other media) should be decoupled from the node system.  Right now, images are added as a node with a reference to a file or set of files.
    <ul>
      <li class="row0"> As nodes, images get access control and all the other system features that go with the node system</li>
      <li class="row1"> Adding them as a &quot;first class&quot; system object, co-equal with nodes would require a good deal of rework within Drupal&#39;s APIs</li>
      <li class="row0"> There are loads of pros/cons that I am not able to capture here, but the above gives you a taste.</li>

    </ul>
    </li>
    <li class="row1"> Morten (aka &quot;The King of Denmark&quot;) foolishly agreed to help streamline the UI
    <ul>
      <li class="row0"> But Morten (<a href="http://morten.dk/">http://morten.dk/</a>) does have an eye for UI, so this is good news. </li>
    </ul>
    </li>

    <li class="row1"> There was a tension between the &quot;big picture&quot; of image handlin (no pun intended)
    <ul>
      <li class="row0">  &quot;Digital Asset Management&quot; - ie a generic approach to all media types
      <ul>
        <li class="row1"> A lot of work has been done on this, but it&#39;s just too much work to deal with right now.  Also, it presents a big change from current practice and there is a desire to get this right on the first try</li>

        <li class="row0"> And..the simpler approach of addressing only images
        <ul>
          <li class="row1"> It sounds like there is a good chance to get this into core for Drupal 7</li>
        </ul>
        </li>
      </ul>
      </li>
    </ul>

    </li>
    <li class="row0"> Check out Image field (requires imagecache)
    <ul>
      <li class="row1"> <a href="http://drupal.org/project/imagefield">http://drupal.org/project/imagefield</a></li>
      <li class="row0"> &quot;Image field provides a basic image field for CCK.&quot;
      <ul>
        <li class="row1"> This does solve a lot of problems already</li>

      </ul>
      </li>
    </ul>
    </li>
  </ul>
  </li>
</ul>
</div>]]></description>
         <link>http://blog.lib.umn.edu/fenne035/academe2.0/2007/10/drupalcon_2007_day_one.html</link>
         <guid>http://blog.lib.umn.edu/fenne035/academe2.0/2007/10/drupalcon_2007_day_one.html</guid>
         <category>Drupal</category>
         <pubDate>Tue, 02 Oct 2007 12:48:00 +0000</pubDate>
      </item>
      
      <item>
	
         <title>You&apos;re Already Twittering, Ask Me How</title>
         <description><![CDATA[<p>I had a bit of an "a-ha" moment this morning.  My wife and I have been using Google Talk to stay in touch throughout the workday ever since the service came out.  It's been an invaluable tool to exchange quick details, like dinner times.  And now that we essentially work for the same organization,  real work has crept into our exchanges.</p>

<p>Early on, she started to customize her status message throughout the day, often with very funny observations on personal states of being: "Snacking."  I started to keep mine fairly up-to-date too, inspired by her creativity.  I generally reference the web project de jure in my own messages.</p>

<p>I've also noticed that a number of my librarian buddies have gotten in the customizing habit: "Busy - Off Getting Coffee."  I find this sort of thing both mildly amusing and somewhat helpful.</p>

<p>So, there are obvious differences between customizing your status message on your chat account and keeping a twitter message updated (don't know what Twitter is? <a href="http://twitter.com/faq">Have a Look</a>):<br />
<ul><br />
<li>Twitter offers more lines of text for your message</li><br />
<li>Chat systems, well, they allow you to chat</li><br />
<li>And so on...<br />
</ul><br />
But Twitter didn't really get far past my hype filter until I realized today that I'm already twittering via my chat client.  I'm now officially interested in trying out a little Twittering.<br />
</p>]]></description>
         <link>http://blog.lib.umn.edu/fenne035/academe2.0/2007/07/youre_already_twittering_ask_m.html</link>
         <guid>http://blog.lib.umn.edu/fenne035/academe2.0/2007/07/youre_already_twittering_ask_m.html</guid>
         <category></category>
         <pubDate>Thu, 19 Jul 2007 17:17:21 +0000</pubDate>
      </item>
      
      <item>
	<enclosure url="http://widget.meebo.com/b.gif" length="43" type="image/gif" />
         <title>Meebo Chat Rooms</title>
         <description><![CDATA[<p>Kinda neat:</p>

<div style="width:430px"><style>.mcrmeebo { display: block; background:url("http://widget.meebo.com/r.gif") no-repeat top right; } .mcrmeebo:hover { background:url("http://widget.meebo.com/ro.gif") no-repeat top right; } </style><embed src="http://widget.meebo.com/mcr.swf?id=FNywcyLOmz" type="application/x-shockwave-flash" width="430" height="300" /><a href="http://www.meebo.com/rooms" class="mcrmeebo"><img alt="http://www.meebo.com/rooms" src="http://widget.meebo.com/b.gif" width="430" height="45" style="border:0px"/></a></div>

<p>Could be useful for group collaboration internal to the Libraries (Flash is not accessible, ergo this is not for public use on our sites...)</p>]]></description>
         <link>http://blog.lib.umn.edu/fenne035/academe2.0/2007/06/meebo_chat_rooms.html</link>
         <guid>http://blog.lib.umn.edu/fenne035/academe2.0/2007/06/meebo_chat_rooms.html</guid>
         <category>Whoa, Cool!</category>
         <pubDate>Thu, 07 Jun 2007 17:15:54 +0000</pubDate>
      </item>
      
      <item>
	<enclosure url="http://blog.lib.umn.edu/fenne035/academe2.0/skypenum.jpg" length="19512" type="image/jpeg" />
         <title>Skype Firefox Extension - Brilliant</title>
         <description><![CDATA[<p>I just updated Skype on my home computer, and boy am I impressed with one new little feature.  It's a <a href="https://addons.mozilla.org/en-US/firefox/browse/type:1">Firefox extension</a> that looks for phone numbers on web pages.  When it finds one, it highlights it and sticks a "skype out" link on it, which makes for a one-click phone call.</p>

<p>Um, why do I bother using a standard phone anymore?</p>

<p>Technically, this kind of functionality is easy to achieve.  But the phone needs to talk to the computer.  It's a natural feature for a <a href="http://en.wikipedia.org/wiki/Voice_over_IP">VoIP</a> service, and would be a major pain in the rear for a traditional phone.</p>

<p>Anyway, here's what it looks like:</p>

<center>
<img style="border: 1px solid #ccc; margin-bottom: 15px;" alt="skypenum.jpg" src="http://blog.lib.umn.edu/fenne035/academe2.0/skypenum.jpg" width="259" height="80" /></center>
]]></description>
         <link>http://blog.lib.umn.edu/fenne035/academe2.0/2007/05/skype_firefox_extension_brilli.html</link>
         <guid>http://blog.lib.umn.edu/fenne035/academe2.0/2007/05/skype_firefox_extension_brilli.html</guid>
         <category>Whoa, Cool!</category>
         <pubDate>Thu, 03 May 2007 00:40:18 +0000</pubDate>
      </item>
      
      <item>
	
         <title>Speed Reading XML with PHP XMLReader</title>
         <description><![CDATA[<p>First, allow me to bow down and grovel before all those who had a hand in creating the <a href="http://us.php.net/xmlreader">PHP XMLReader Library</a>.  Your work is indeed grovel-worthy.</p>

<p>What is the XMLReader Library, you ask? Itâ€™s a â€œthin PHP layerâ€? on top of a ridiculously fast C/C++ XML pull parsing utility, and I thank my lucky stars for bumping into it (<a href="http://www-128.ibm.com/developerworks/library/x-pullparsingphp.html">Pull parsing XML in PHP - IBM</a>).</p>

<p>Iâ€™ve been working on various projects that require lots of citations from <a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?DB=pubmed">PubMed</a>.  And, I wrote some scripts to download them en masse via PubMedâ€™s Entrez Programming Utilities, which offer a simple XML API to PubMed data.  So, I downloaded a batch of 50k for my latest project, and casually noticed that the resulting file was 250+ megs. I needed to take that data and transform it into <a href="http://en.wikipedia.org/wiki/BibTeX">BibTeX.</a>  â€œOh Dear,â€? I thought, â€œWill <a href="http://us.php.net/simplexml">SimpleXML</a> handle all that data?â€?  Nope, it laughed in my face, a deep, long, belly laugh.  Then it walked away.</p>

<p>Rats.  I could have broken the file down into baby files, but it sort of annoyed me to have to do so, especially as I was inevitably going to have to rinse and repeat this process every time I needed different data.  So, I cast about to find a more acceptable solution.  And behold, right under my nose, PHP 5 had gone and bundled the <a href="http://us.php.net/xmlreader">XMLReader Library</a> into its core offerings. Yay.  </p>

<p>Instead of laughing at me and walking off into the distance, XMLReader chewed right through that massive document like a Minnesotan with a turkey leg at the <a href="http://www.mnstatefair.org/pages/grandstand.html">state fair</a>.  </p>

<p>Enough background.  For those of you who do PHP and XML, Iâ€™m including my script below.  Read on if youâ€™re interested.  If you gag at the site of code, move along, nothing to see here.<br />
</p>]]></description>
         <link>http://blog.lib.umn.edu/fenne035/academe2.0/2007/04/speed_reading_xml_with_php_xml.html</link>
         <guid>http://blog.lib.umn.edu/fenne035/academe2.0/2007/04/speed_reading_xml_with_php_xml.html</guid>
         <category></category>
         <pubDate>Thu, 19 Apr 2007 23:23:01 +0000</pubDate>
      </item>
      
      <item>
	
         <title>Lightbox 2 = JS Goodness + Your Image Gallery</title>
         <description><![CDATA[<p>Wow, this is a neat tool: </p>

<p><a href="http://www.huddletogether.com/projects/lightbox2/">http://www.huddletogether.com/projects/lightbox2/</a></p>

<p>I slapped something together on my staging server:</p>

<p><a href="http://webstaging.dewey.lib.umn.edu/image/tid/224">http://webstaging.dewey.lib.umn.edu/image/tid/224</a></p>

<p>It could hardly have been easier.  I also love that this gracefully degrades.  With Javascript turned off, users are simply taken directly to the image itself.  I can imagine a number of uses for this utility, but I'm most interested in looking at integrating it into online exhibits, where we might have an image that triggers a pop-up that allows users to page through various images.  This is a common feature on newspaper sites and the like.</p>]]></description>
         <link>http://blog.lib.umn.edu/fenne035/academe2.0/2007/04/lightbox_2_js_goodness_your_im.html</link>
         <guid>http://blog.lib.umn.edu/fenne035/academe2.0/2007/04/lightbox_2_js_goodness_your_im.html</guid>
         <category></category>
         <pubDate>Thu, 19 Apr 2007 21:26:22 +0000</pubDate>
      </item>
      
      <item>
	
         <title>LibWidget Branding</title>
         <description><![CDATA[<p>Just playing around with branding for the Code Snippets/LibWidgets/whatever we're gonna call these things.  The widget generator is written in  PHP and Javascript.  Thanks to <a href="ttp://www.ilovejackdaniels.com/php/caching-output-in-php/">I Love Jack Daniels</a> for the idea behind the simple caching mechanism.</p>

<p><script language="JavaScript" src="https://www.biomed.lib.umn.edu/codesnippets/index.php?page_id=2002&styled=yes" type="text/javascript"></script>Can't Access This Page? <a href="http://www.biomed.lib.umn.edu/help/guides/HSM3521">Go to the Original</a> </p>]]></description>
         <link>http://blog.lib.umn.edu/fenne035/academe2.0/2007/04/libwidget_branding.html</link>
         <guid>http://blog.lib.umn.edu/fenne035/academe2.0/2007/04/libwidget_branding.html</guid>
         <category></category>
         <pubDate>Thu, 19 Apr 2007 16:18:03 +0000</pubDate>
      </item>
      
      <item>
	
         <title>Drupal 6 Language Support</title>
         <description><![CDATA[<p>Wow, this will be super useful.  We haven't even begun to tackle multilingual support for our web presence in the U Libraries, but it has often been discussed.  This feature could give us a real leg up:<br />
<blockquote><br />
"Following on a huge amount of discussion and planning at the Internationalization Group, Jose A. Reyero, KÃ¡roly NÃ©gyesi (chx) and GÃ¡bor Hojtsy (myself) prepared a big patch to introduce better language support into Drupal 6.x-dev. We got significant code reviews and correction tips from Dries Buytaert, Steven Wittens and Doug Green. As a result, the development version of Drupal 6 now includes a generic language setup screen with support for right-to-left written scripts, native language names, path and domain based language selection and browser language detection. We also added support for language dependent path aliases, so you can have addresses like "example.com/espanol/contacto" and "example.com/english/contact", or alternatively "english.example.com/contact" and "espanol.example.com/contacto".<br />
</blockquote></p>

<p><a href="http://drupal.org/node/131516">See the Anoucement: http://drupal.org/node/131516</a></p>]]></description>
         <link>http://blog.lib.umn.edu/fenne035/academe2.0/2007/04/drupal_6_language_support.html</link>
         <guid>http://blog.lib.umn.edu/fenne035/academe2.0/2007/04/drupal_6_language_support.html</guid>
         <category></category>
         <pubDate>Fri, 13 Apr 2007 16:15:00 +0000</pubDate>
      </item>
      
      <item>
	
         <title>Embedding a Library Page in My Blog v 2.0</title>
         <description><![CDATA[<p>Embedding a library guide page is a snap with my new code snippet widget.  Today, I built in a little cache goodness; now these pages are generated from flat files.  Translation: the code snippets render blindingly fast.</p>

<p><script language="JavaScript" src="https://webstaging.dewey.lib.umn.edu/snippets/index.php?page_id=184&styled=yes" type="text/javascript"></script>Can't Access This Page? <a href="http://webstaging.dewey.lib.umn.edu/help/guides/dent5401">Go to the Original</a> </p>]]></description>
         <link>http://blog.lib.umn.edu/fenne035/academe2.0/2007/03/embedding_a_library_page_in_my.html</link>
         <guid>http://blog.lib.umn.edu/fenne035/academe2.0/2007/03/embedding_a_library_page_in_my.html</guid>
         <category></category>
         <pubDate>Thu, 15 Mar 2007 16:09:46 +0000</pubDate>
      </item>
      
      <item>
	
         <title>Innovate: Journal of Online Education</title>
         <description><![CDATA[<p>Hmmm...</p>

<blockquote>Innovate is a bimonthly, peer-reviewed online periodical (ISSN 1552-3233) published by the Fischler School of Education and Human Services at Nova Southeastern University. The journal focuses on the creative use of information technology (IT) to enhance educational processes in academic, commercial, and governmental settings. Our basic assumption is that innovative uses of technology in one sector can inform innovative uses of technology in each of the other sectors.

<p>We welcome submissions from a wide community of practitionersâ€”from professors, teachers, trainers, and support specialists to program administrators, software designers, and leaders in the information technology industry. Articles generally fall into one of the following categories:</blockquote></p>

<p><a href="http://www.innovateonline.info/index.php?view=about">Go to Innovate</a><br />
</p>]]></description>
         <link>http://blog.lib.umn.edu/fenne035/academe2.0/2006/02/innovate_journal_of_online_edu.html</link>
         <guid>http://blog.lib.umn.edu/fenne035/academe2.0/2006/02/innovate_journal_of_online_edu.html</guid>
         <category></category>
         <pubDate>Fri, 17 Feb 2006 17:24:59 +0000</pubDate>
      </item>
      
   </channel>
</rss>
