<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"><channel><title>Disruptive Library Technology Jester &#187; programming</title> <atom:link href="http://dltj.org/tag/programming/feed/" rel="self" type="application/rss+xml" /><link>http://dltj.org</link> <description>We&#039;re Disrupted, We&#039;re Librarians, and We&#039;re Not Going to Take It Anymore</description> <lastBuildDate>Fri, 18 May 2012 15:43:10 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <cloud domain='dltj.org' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' /> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/us/</creativeCommons:license> <item><title>Thursday Threads: Learn to Code in 2012, Issues with Apple&#8217;s iBooks Author, SOPA/PIPA Are Dead</title><link>http://dltj.org/article/thursday-threads-2012w04/</link> <comments>http://dltj.org/article/thursday-threads-2012w04/#comments</comments> <pubDate>Thu, 26 Jan 2012 11:16:40 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[Thursday Threads]]></category> <category><![CDATA[internet]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[legislation]]></category> <category><![CDATA[programming]]></category> <category><![CDATA[PROTECT-IP Act]]></category> <category><![CDATA[publishing]]></category> <category><![CDATA[Stop Online Piracy Act]]></category> <category><![CDATA[textbook]]></category><guid isPermaLink="false">http://dltj.org/?p=3624</guid> <description><![CDATA[Receive DLTJ Thursday Threads:by&#160;E-mailby&#160;RSSDelivered by FeedBurner The internet has survived the great SOPA blackout, and we&#8217;re still talking about the fallout. Apple made a major announcement of plans to support textbooks on iPads, but there are concerns about the implementation. &#8230; <a href="http://dltj.org/article/thursday-threads-2012w04/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/?p=3624"></abbr><div id="feedburner-thursday-threads-email-2012w04" class="wp-caption alignright noprint noFrontPage" style="width: 230px;;  border: 1px solid #dddddd; background-color: #f3f3f3; padding-top: 4px; margin: 10px; text-align:center; float: right;"><form style="border: 1px solid rgb(204, 204, 204); padding: 3px; margin: 0pt; text-align: center;" action="http://feedburner.google.com/fb/a/mailverify" method="post" target="popupwindow" onsubmit="window.open('http://feedburner.google.com/fb/a/mailverify?uri=thursday-threads', 'popupwindow', 'scrollbars=yes,width=550,height=520');return true"><p>Receive <i><acronym title="Disruptive Library Technology Jester">DLTJ</acronym></i> Thursday Threads:</p><p>by&nbsp;<a href="http://feedburner.google.com/fb/a/mailverify?uri=thursday-threads&amp;loc=en_US" title="D.L.T.J. Thursday Threads Email Subscription">E-mail</a><br /><input style="width: 140px;" name="email" value="Your e-mail address" onfocus="if (this.defaultValue==this.value) this.value = ''" type="text"/><input value="thursday-threads" name="uri" type="hidden"/><input name="loc" value="en_US" type="hidden"/><input value="Subscribe" type="submit"/></p><p>by&nbsp;<a href="http://feeds.dltj.org/thursday-threads/" title="D.L.T.J. Thursday Threads RSS Feed">RSS</a></p><p style="font-size: 80%;">Delivered by <a href="http://feedburner.google.com" target="_blank" title="Google Feedburner Service">FeedBurner</a></p></form></div><p> The internet has survived the great <abbr title="Stop Online Piracy Act">SOPA</abbr> blackout, and we&#8217;re still <a href="#p3624-sopa-pipa">talking about the fallout</a>.  Apple made a major announcement of plans to support textbooks on iPads, but <a href="#p3624-ibooks-author">there are concerns about the implementation</a>.  But the first story this week is about a <a href="#p3624-codeyear">free service geared towards teaching people how to program</a> with weekly lessons throughout 2012.</p><p>Feel free to send this to others you think might be interested in the topics.  If you find these threads interesting and useful, you might want to add the <a title="RSS Feed for DLTJ Thursday Threads" href="http://feeds.dltj.org/thursday-threads/">Thursday Threads RSS Feed</a> to your feed reader or subscribe to e-mail delivery using the form to the right. <em>New this year is that <strong>Pinboard has replaced FriendFeed as my primary aggregation service</strong>.</em> If you would like a more raw and immediate version of these types of stories, watch <a title="Peter Murray | Pinboard" href="http://pinboard.in/u:dltj">my Pinboard bookmarks</a> (or subscribe to <a title="RSS feed for Peter Murray's Pinboard account" href="http://feeds.pinboard.in/rss/u:dltj/">its feed</a> in your feed reader).  Items posted to are also sent out as <a title="Peter Murray's Twitter page" href="https://twitter.com/DataG">tweets</a>; you can <a target="_blank" href="https://twitter.com/intent/user?screen_name=DataG">follow me on <span style="background-image: url(&quot;//si0.twimg.com/images/dev/cms/intents/bird/bird_blue/bird_16_blue.png&quot;); background-repeat: no-repeat; padding-left: 18px;">Twitter</span></a>.  Comments and tips, as always, are <a href="http://dltj.org/contact">welcome</a>.</p><p><h2 id="p3624-codeyear">Code Year: Learn to Code in 2012</h2></p><blockquote><p>Sign up for Code Year to start receiving a new interactive programming lesson every Monday. You&#8217;ll be building apps and websites before you know it!<div style="text-align: right; width: 100%;"><cite>- <a href="http://codeyear.org/" title="Code Year">Code Year</a></cite></div></blockquote><p>Code Year is a project of internet startup <a href="http://www.codecademy.com/" title="Learn to code | Codecademy">Codecademy</a>, a service that teaches people <a href="http://www.codecademy.com/courses" title="Courses | Codecademy">how to code</a> (JavaScript only, <a href="http://blog.codecademy.com/var-firstpost" title="post[1] = &amp;quot;Updates from Codecademy&amp;quot; - Codecademy Blog">at the moment</a>).  There have been <a href="http://www.codecademy.com/codeyear/week/1" title="Code Year: Week 1 | Codecademy">three</a> <a href="http://www.codecademy.com/codeyear/week/2" title="Code Year: Week 2 | Codecademy">classes</a> <a href="http://www.codecademy.com/codeyear/week/3" title="Code Year: Week 3 | Codecademy">posted</a> already, and the website says they are still accepting registrations at the homepage.  Code Year is free, and it sends an e-mail at the beginning of each week with a link to that week&#8217;s course.  More questions?  See the <a href="http://www.codecademy.com/codeyear/week/1#codeyear_faq" title="Code Year FAQ from  Week 1 | Codecademy">frequently asked questions</a>.</p><p>What I think is really cool about this is that a group of librarians has self-organized themselves to support each other through the year.  There is a <a href="http://connect.ala.org/codeyear" title="Code Year | ALA Connect">community area on ALA Connect</a> and a list of <a href="http://catcode.pbworks.com/w/page/49680175/Resources" title="Resources | catcode">resources</a> on the <a href="http://catcode.pbworks.com/w/page/49328692/Welcome%20to%20CatCode%21" title="catcode wiki homepage">catcode wiki</a> that includes <a href="http://catcode.pbworks.com/w/browse/#view=ViewFolder&#038;param=Cataloguing%20Code%20Examples" title="Cataloguing Code Examples | catcode">examples tailored to cataloging challenges</a>.  (&#8220;catcode&#8221; is a unique story onto itself.  It is a wiki created to &#8220;help support dialogue between catalogers and coders.&#8221;)</p><p><h2 id="p3624-ibooks-author">Apple Introduces iBooks Author</h2></p><blockquote><p>Educators so far seem excited about the potential promise of a learning &#8220;revolution&#8221; enabled by Apple&#8217;s new iBooks Author app. However, not everyone is feeling that same level of enthusiasm: e-book publishing experts have concerns about the formatting that iBooks Author can output, which isn&#8217;t fully ePub 2 or ePub 3 compliant. Furthermore, Apple has added a clause to iBooks Author&#8217;s end user license agreement that prohibits selling e-books created with iBooks Author anywhere but the iBookstore.<div style="text-align: right; width: 100%;"><cite>- <a href="http://arstechnica.com/apple/news/2012/01/enthusiasm-for-ibooks-author-marred-by-licensing-format-issues.ars" title="Enthusiasm for iBooks Author marred by licensing, format issues | Ars Technica">Enthusiasm for iBooks Author marred by licensing, format issues</a>, by <a href="http://arstechnica.com/author/chris-foresman/" title="Chris Foresman">Chris Foresman</a>, Ars Technica</cite></div></blockquote><p>Last week saw the big introduction of <a href="http://www.apple.com/education/ibooks-textbooks/" title="iBooks Textbooks for iPad | Apple">iBooks Textbooks for iPad</a> and <a href="http://www.apple.com/ibooks-author/" title="iBooks Author | Apple">iBooks Author</a> ebook creation utility.  The combination were billed as a promising new way to have students interact with course materials and to have teachers build their own content.  There were some not-so-nice surprises in the implementation, though.  First, the ebook format is close to that of <a href="http://idpf.org/epub/30" title="EPUB 3 | International Digital Publishing Forum">ePub</a> standard from the <a href="http://idpf.org/" title="International Digital Publishing Forum homepage">International Digital Publishing Forum</a>, but strays in enough important ways that the iBooks Textbooks themselves won&#8217;t be usable on non-Apple devices.  Second, included the End-User License Agreement for the iBooks Author software are terms that says content created with iBooks Author can be given away freely but can only be sold through Apple&#8217;s iBookstore.  Apple also reserves the right to determine if your work is sold at iBookstore with no recourse for rejected works.  The article above has more details, and the <a href="https://www.google.com/search?q=apple+%22ibooks+textbooks%22+%22ibooks+author%22&amp;hl=en#q=apple+%22ibooks+textbooks%22+%22ibooks+author%22&amp;hl=en&amp;tbs=cdr:1,cd_min:1/19/2012,cd_max:1/26/2012&amp;prmd=imvnsu&amp;source=lnms&amp;tbm=nws&amp;ei=-aUgT4SDBIKKsgL6nIWHCQ&amp;sa=X&amp;oi=mode_link&amp;ct=mode&amp;cd=5&amp;ved=0CCIQ_AUoBA&amp;bav=on.2,or.r_gc.r_pw.,cf.osb&amp;fp=a5444d29e38610fe&amp;biw=1024&amp;bih=670" title="apple 'ibooks textbooks' 'ibooks author' | Google News Search for Jan 19-26, 2012">press coverage of iBooks Textbooks and iBooks Author</a> has been generally negative so far.</p><p><em>Update on 6-Feb-2012:</em> Apple released iBooks Author version 1.0.1 with the only change being <a href="http://www.zdnet.com/blog/bott/apples-lawyers-clean-up-the-sloppy-ibooks-author-eula/4476" title="Apple&amp;#039;s lawyers clean up the sloppy iBooks Author EULA | ZDNet">clarifications to the End-User License Agreement</a>:  &#8220;If you want to charge a fee for a work that includes files in the .ibooks format generated using iBooks Author, you may only sell or distribute such work through Apple, and such distribution will be subject to a separate agreement with Apple&#8230; This restriction does not apply to the content of such works when distributed in a form that does not include files in the .ibooks format.&#8221;</p><p><h2 id="p3624-sopa-pipa">SOPA and Protect-IP Are Dead</h2><br /><div id="p3624-tpm-graphic" class="wp-caption alignright" style="width: 310px;  border: 1px solid #dddddd; background-color: #f3f3f3; padding-top: 4px; margin: 10px; text-align:center; float: right;"><a href="http://idealab.talkingpointsmemo.com/2012/01/how-the-web-killed-sopa-and-pipa.php" title="How The Web Killed SOPA and PIPA | Talking Points Memo Idea Lab"><img alt="" src="http://talkingpointsmemo.com/images/sopa-protest.png" title="Websites Planning to Protest SOPA and PIPA" width="300" height="234" /></a><p style=' padding: 0 4px 5px; margin: 0;'  class="wp-caption-text">Graphic from Talking Points Memo</p></div></p><blockquote><p>Leaders in Congress on Friday <a href="http://idealab.talkingpointsmemo.com/2012/01/senator-reid-postpones-pipa-vote.php" title="Senator Reid Postpones PIPA Vote | Talking Points Memo Idea Lab">effectively killed two pieces of anti-online piracy legislation</a> following the increasingly vocal <a href="http://idealab.talkingpointsmemo.com/2012/01/sopapipa-blackout-by-the-numbers.php" title="SOPA/PIPA Blackout By the Numbers | Talking Points Memo Idea Lab">protests</a> of tens of thousands of websites and millions of Internet users.</p><p>That’s right, the Stop Online Piracy Act (SOPA) in the House and the PROTECT IP Act (PIPA) in the Senate are, for all practical purposes, dead in the water.</p><p>Sure, <a href="http://news.talkingpointsmemo.com/2012/01/full-reid-statement-on-pipa.php" title="Full Reid Statement On PIPA | Talking Points Memo News">Senate Majority Leader Harry Reid (D-NV)</a> and <a href="http://judiciary.house.gov/news/01202012.html" title="Statement from Chairman Smith on Senate Delay of Vote on PROTECT IP Act">Rep. Lamar Smith (R-TX)</a> used the word “postponed” in their announcements, saying that Congress would only take a breather, but would certainly not give up for good on its goal of passing some sort of legislation designed to combat overseas “rogue” websites hosting pirated American content.</p><p>But whenever Congress decides to re-engage the online piracy fight — and it could be a while, given just how acrimonious the debate over the bills became in the last week — it’s almost certain that SOPA and PIPA <em>won’t</em> be revived in any recognizable form.</p><div style="text-align: right; width: 100%;"><cite>- <a href="http://idealab.talkingpointsmemo.com/2012/01/how-the-web-killed-sopa-and-pipa.php" title="How The Web Killed SOPA and PIPA | TPM Idea Lab">How The Web Killed SOPA and PIPA</a>, by <a href="http://talkingpointsmemo.com/carl_franzen.php" title="Carl Franzen | Talking Points Memo">Carl Franzen</a>, Talking Points Memo Idea Lab</cite></div></blockquote><p>Who would have thought &#8212; grass roots organizations convince major internet presences to &#8220;black out&#8221; or otherwise inform users of ill-considered provisions (at best) in legislation, and in turn those users bury both houses of Congress with so much anti-<abbr title="Stop Online Piracy Act">SOPA</abbr> and -<abbr title="PROTECT-IP Act">PIPA</abbr> feedback that they effectively kill the bills.  Is this the closest we&#8217;ve come to direct democracy since ancient Athens?  Perhaps!  The article quoted above goes into great detail about the formational elements of SOPA and PIPA and the forces that gathered to stop them.</p><p>The response to Wikipedia being blacked out in particular was interesting.  The Washington Post, The Guardian and National Public Radio <a href="http://www.washingtonpost.com/blogs/blogpost/post/wikipedia-blackout-an-altwiki-band-aid/2012/01/17/gIQAWbg25P_blog.html" title="Wikipedia Blackout: An #altwiki Band-Aid | The Washington Post">announced that they would answer questions</a> posted to Twitter with the hashtag #altwiki. Closer to the library community <a href="http://blog.credoreference.com/2012/01/credo-reference-to-remain-open-for-learning/" title="Credo Reference to remain open for learning | Credo Reference Blog">Credo Reference announced that free access for a day</a>.</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/thursday-threads-2012w04/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Thursday Threads: Pro-Library Protest Song, How Google Improves it Search, Learning Programming Skills</title><link>http://dltj.org/article/thursday-threads-2011w35/</link> <comments>http://dltj.org/article/thursday-threads-2011w35/#comments</comments> <pubDate>Wed, 31 Aug 2011 20:50:27 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[Thursday Threads]]></category> <category><![CDATA[advocacy]]></category> <category><![CDATA[Google]]></category> <category><![CDATA[programming]]></category><guid isPermaLink="false">http://dltj.org/?p=3154</guid> <description><![CDATA[Receive DLTJ Thursday Threads:by&#160;E-mailby&#160;RSSDelivered by FeedBurnerAfter a longer than intended hiatus, DLTJ Thursday Threads is back. Feel free to send this to others you think might be interested in the topics. If you find these threads interesting and useful, you &#8230; <a href="http://dltj.org/article/thursday-threads-2011w35/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/?p=3154"></abbr><div id="feedburner-thursday-threads-email-2011w35" class="wp-caption alignright noprint noFrontPage" style="width: 230px;;  border: 1px solid #dddddd; background-color: #f3f3f3; padding-top: 4px; margin: 10px; text-align:center; float: right;"><form style="border: 1px solid rgb(204, 204, 204); padding: 3px; margin: 0pt; text-align: center;" action="http://feedburner.google.com/fb/a/mailverify" method="post" target="popupwindow" onsubmit="window.open('http://feedburner.google.com/fb/a/mailverify?uri=thursday-threads', 'popupwindow', 'scrollbars=yes,width=550,height=520');return true"><p>Receive <i><acronym title="Disruptive Library Technology Jester">DLTJ</acronym></i> Thursday Threads:</p><p>by&nbsp;<a href="http://feedburner.google.com/fb/a/mailverify?uri=thursday-threads&amp;loc=en_US" title="D.L.T.J. Thursday Threads Email Subscription">E-mail</a><br /><input style="width: 140px;" name="email" value="Your e-mail address" onfocus="if (this.defaultValue==this.value) this.value = ''" type="text"/><input value="thursday-threads" name="uri" type="hidden"/><input name="loc" value="en_US" type="hidden"/><input value="Subscribe" type="submit"/></p><p>by&nbsp;<a href="http://feeds.dltj.org/thursday-threads/" title="D.L.T.J. Thursday Threads RSS Feed">RSS</a></p><p style="font-size: 80%;">Delivered by <a href="http://feedburner.google.com" target="_blank" title="Google Feedburner Service">FeedBurner</a></p></form></div><p>After a longer than intended hiatus, <i><acronym title="Disruptive Library Technology Jester">DLTJ</acronym> Thursday Threads is back</i>.</p><p>Feel free to send this to others you think might be interested in the topics.  If you find these threads interesting and useful, you might want to add the <a href="http://feeds.dltj.org/thursday-threads/" title="RSS Feed for DLTJ Thursday Threads">Thursday Threads RSS Feed</a> to your feed reader or subscribe to e-mail delivery using the form to the right.  If you would like a more raw and immediate version of these types of stories, watch <a href="http://friendfeed.com/dltj" title="Peter Murray - FriendFeed">my FriendFeed stream</a> (or subscribe to <a href="http://friendfeed.com/dltj?format=atom" title="Atom feed for Peter Murray's FriendFeed account">its feed</a> in your feed reader).  Comments and tips, as always, are <a href="http://dltj.org/contact">welcome</a>.</p><p><h2 id="p3154-pro-library-protest-song">A Pro-Library Protest Song</h2><br /><div id="youtube-MDi5JtS1H" class="wp-caption alignright" style="width: 310px;  border: 1px solid #dddddd; background-color: #f3f3f3; padding-top: 4px; margin: 10px; text-align:center; float: right;"><iframe width="299" height="168" src="http://www.youtube.com/embed/MDi5JtS1H-g?rel=0" frameborder="0" allowfullscreen></iframe><p style=' padding: 0 4px 5px; margin: 0;'  class="wp-caption-text">Six minute video of Piers Cawley at OSCON 2011</p></div><br /><blockquote>I’m a Child of the Lib’ry, it made me who I am, /<br />It taught me about freedom and the fellowship of Man /<br />A sea of story waits for you behind the lib’ry door, /<br />Don’t say we can’t afford them any more.<div style="text-align: right; width: 100%;"><cite>- Chorus from <a href="http://www.youtube.com/watch?v=MDi5JtS1H-g" title="OSCON 2011: Piers Cawley, &amp;quot;Child of the Library&amp;quot;<br /> - YouTube">&#8220;Child of the Library&#8221;</a></cite>, by Piers Cawley, OSCON 2011</div></blockquote><p>OSCON is the O&#8217;Reilly Open Source Convention, held this year July 25-29, 2011 in Portland, OR.  Normally an event for all things open source software, <a href="http://www.bofh.org.uk/" title="Just A Summary">Piers Cawley</a> stepped outside that box this year by asking attendees if they have ever used a library and if they have used a library in the past month.  He then sung a song he <a href="http://www.bofh.org.uk/2011/02/09/save-our-libraries" title="Save Our Libraries">wrote earlier this year</a> when he learned about the <a href="http://www.bofh.org.uk/2011/02/09/save-our-libraries" title="Save Our Libraries">drastic cuts facing public libraries in the U.K.</a> Piers has released the song under a Creative Commons license and asks that people spread it far and wide.</p><p><h2 id="p3154-google-search-algorithm">How Google Makes Improvements to Its Search Algorithm</h2><br /><div id="youtube-J5RZOU6vK4Q" class="wp-caption alignright" style="width: 310px;  border: 1px solid #dddddd; background-color: #f3f3f3; padding-top: 4px; margin: 10px; text-align:center; float: right;"><iframe width="299" height="168" src="http://www.youtube.com/embed/J5RZOU6vK4Q?rel=0" frameborder="0" allowfullscreen></iframe><p style=' padding: 0 4px 5px; margin: 0;'  class="wp-caption-text">Four minute video from Google</p></div><br /><blockquote>Here&#8217;s a short video we put together that gives you a sense of the work that goes into the changes and improvements we make to Google almost every day. While an improvement to the algorithm may start with a creative idea, it always goes through a process of rigorous scientific testing.<div style="text-align: right; width: 100%;"><cite>- <a href="http://www.youtube.com/watch?v=J5RZOU6vK4Q" title="How Google makes improvements to its search algorithm - YouTube">How Google makes improvements to its search algorithm &#8211; YouTube</a></cite>, Google</div></blockquote><p>Curious to know how Google engineers try to find the best search results?  This video from <a href="http://www.google.com/insidesearch/" title="Google Inside Search">Google&#8217;s web search team</a> talks about how it uses various &#8220;signals&#8221; and adapts the algorithm as often as once a day to improve relevance ranking.</p><p><h2 id="p3154-codecademy">New Web-based Tool Teaches the Basics of JavaScript Programming</h2></p><blockquote><p>Three days ago <a href="http://techcrunch.com/2011/08/18/codecademy-a-slick-fun-way-to-teach-yourself-how-to-program/" title="Codecademy: A Slick, Fun Way To Teach Yourself How To Program | TechCrunch">I wrote</a> about <a href="http://www.codecademy.com/" title="Learn to code | Codecademy">Codecademy</a> —&nbsp;a slick, fun way to teach yourself how to program. The app has done an excellent job minimizing the frustration often associated with writing your first lines of code, and it sports a good-looking and intuitive interface. Another plus: the initial signup flow doesn’t show up til you’ve completed your first few lessons, so you’re writing code within a few seconds of landing at Codecademy.com.</p><p>I’m not the only one who liked it: cofounder Zach Sims tells us that in the three days since the application launched, it has drawn <em>200,000</em> unique users. That’s users who have actually interacted with the app —&nbsp;and not people who hit the webpage and bounced away a second later. Perhaps even more impressive: users have completed a total number of <em>2.1 million</em> exercises.</p><div style="text-align: right; width: 100%;"><cite>- <a href="http://techcrunch.com/2011/08/22/codecademy-surges-to-200000-users-2-1-million-lessons-completed-in-72-hours/" title="Codecademy Surges To 200,000 Users, 2.1 Million Lessons Completed In 72 Hours | TechCrunch">Codecademy Surges To 200,000 Users, 2.1 Million Lessons Completed In 72 Hours</a>, by Jason Kinkaid, TechCrunch</cite></div></blockquote><p>A popular topic on library technology mailing lists is librarians asking for advice on how to get started with programming.  This was, in face, a key part of <a href="http://www.slideshare.net/smartbroad/code4lib-keynote-2011" title="Code4Lib Keynote 2011">Diane Hillman&#8217;s keynote</a> at the Code4Lib conference this year &#8212; getting catalogers and programmers closer together.</p><p>Enter a new option: Codecademy.  A new startup that went public this week, it teaches the <a href="http://www.codecademy.com/courses/programming-intro" title="Getting Started with Programming | Codecademy">basics of JavaScript programming</a> through an interactive, web-based interface.  There are just eight lessons at the moment, but there is the promise of more to come.  Now if only we had an equivalent way to teach coders about cataloging and the MARC format&#8230;</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/thursday-threads-2011w35/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>JPEG2000 to Zoomify Code4Lib Lightning Talk Video Now Available</title><link>http://dltj.org/article/jpeg2000-to-zoomify-lightning-talk-video/</link> <comments>http://dltj.org/article/jpeg2000-to-zoomify-lightning-talk-video/#comments</comments> <pubDate>Thu, 15 May 2008 19:16:33 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[JPEG2000]]></category> <category><![CDATA[code4lib]]></category> <category><![CDATA[code4lib Conference 2008]]></category> <category><![CDATA[j2ktilerenderer]]></category> <category><![CDATA[java]]></category> <category><![CDATA[jpeg2000]]></category> <category><![CDATA[programming]]></category> <category><![CDATA[video]]></category><guid isPermaLink="false">https://dltj.org/?p=366</guid> <description><![CDATA[Thanks, Noel, and everyone else who made the video editions of Code4Lib 2008 presentations possible. I just had a chance to notice that the video from my JPEG2000 to Zoomify Shim lightning talk was online: Some updates since the post &#8230; <a href="http://dltj.org/article/jpeg2000-to-zoomify-lightning-talk-video/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="https://dltj.org/?p=366"></abbr><p>Thanks, Noel, and everyone else who made the <a href="http://video.google.com/videosearch?q=code4lib+2008&#038;sitesearch=&#038;num=100" title="code4lib 2008 videos in Google Video">video editions</a> of <a href="http://code4lib.org/conference/2008/schedule" title="Code4Lib 2008 Meeting Schedule">Code4Lib 2008 presentations</a> possible.  I just had a chance to notice that the <a href="http://video.google.com/videoplay?docid=-425356268115125043" title="Code4Lib 2008 Lightning Talk: JPEG2000 to Zoomify Shim video">video</a> from my <a href="http://dltj.org/article/introducing-j2ktilerenderer/">JPEG2000 to Zoomify Shim</a> lightning talk was online:</p><div style="width:400px;margin:0px auto;"><embed id="VideoPlayback" style="width:400px;height:326px" flashvars="" src="http://video.google.com/googleplayer.swf?docid=-425356268115125043&#038;hl=en" type="application/x-shockwave-flash"> </embed></div><p>Some updates since the post and the presentation were first done.  The code that exists in the source code repository now was refactored to use <a href="http://code.google.com/p/jj2000/" title="JJ2000 Public Homepage">JJ2000</a> as part of the Sun <span class="removed_link" title="https://jai-imageio.dev.java.net/">ImageIO</span> package.  We were seeing non-threadsafe problems with <a href="http://www.kakadusoftware.com/" title="Kakadu JPEG 2000 SDK Home Page">Kakadu</a> and thought that using the multithreaded ImageIO package would help.  Unfortunately, even with extensive caching, it did not.  My next task is to bring Kakadu back into the picture using the threadsafe JNI implementation that is part of the <a href="https://imageio-ext.dev.java.net/" class="broken_link" rel="nofollow">ImageIO-ext</a> project to see if that helps.</p><p>Unfortunately, time ran out before this needed to go into initial production with the OhioLINK DRC roll-out, so it isn&#8217;t in production.  The scheme shows promise, though, so I&#8217;m going to keep working with it&#8230;<p style="padding:0;margin:0;font-style:italic;">The text was modified to update a link from http://jj2000.epfl.ch/ to http://code.google.com/p/jj2000/ on January 28th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to https://jai-imageio.dev.java.net/ on June 9th, 2011.</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/jpeg2000-to-zoomify-lightning-talk-video/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>PocketModMac:  MacOSX PocketMod Generator Via Print Dialog</title><link>http://dltj.org/article/pocketmodmac/</link> <comments>http://dltj.org/article/pocketmodmac/#comments</comments> <pubDate>Thu, 09 Aug 2007 19:24:43 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[Raw Technology]]></category> <category><![CDATA[Getting Things Done]]></category> <category><![CDATA[Mac OS X Operating System]]></category> <category><![CDATA[pdf]]></category> <category><![CDATA[pocketmod]]></category> <category><![CDATA[productivity]]></category> <category><![CDATA[programming]]></category><guid isPermaLink="false">http://dltj.org/2007/08/pocketmodmac/</guid> <description><![CDATA[This one goes out to all of the MacOS X users out there. (For the rest of you, why aren&#8217;t you switching?) Perhaps you have seen PocketMod &#8212; the origami-like manipulation of an 8 1/2&#8243; by 11&#8243; piece of paper &#8230; <a href="http://dltj.org/article/pocketmodmac/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2007/08/pocketmodmac/"></abbr><p>This one goes out to all of the MacOS X users out there.  (For the rest of you, why aren&#8217;t you <a href="http://www.apple.com/getamac/" title="Apple - Get a Mac">switching</a>?)  Perhaps you have seen <a href="http://pocketmod.com/" title="PocketMod: The Free Disposable Personal Organizer">PocketMod</a> &#8212; the origami-like manipulation of an 8 1/2&#8243; by 11&#8243; piece of paper into an 8-page booklet.<div style="float: right; width: 415px; padding-left: 15px;"><img src="http://cdn.dltj.org/wp-content/uploads/2007/08/pocketmod1.jpg" alt="PocketMod example picture" title="PocketMod example picture" align="right" border="0" width="410" height="306" />Example PocketMod, courtesy of the <a href="http://www.boston.com/business/personaltech/articles/2006/06/25/pda_buffs_go_back_to_basics/" title="PDA buffs go back to basics - The Boston Globe">Boston Globe</a>.</div><p> Touted as a way to <a href="http://www.boston.com/business/personaltech/articles/2006/06/25/pda_buffs_go_back_to_basics/" title="PDA buffs go back to basics - The Boston Globe">&#8220;get back to the basics&#8221; using analog media over digital media</a>, it is a scheme by which you can transform pages of text into a pocket-sized form for carrying around.  Many use it as a way to <a href="http://www.msnbc.msn.com/id/17522664/site/newsweek/" title="The Power of Paper  - Newsweek Enterprise" class="broken_link" rel="nofollow">synchronize their digital to-do lists with the analog world</a>, while others use it <a href="http://www.creativetechs.com/iq/mac_os_x_shortcuts_pocketmod.html" title="CreativeIQ: Mac OS X Shortcuts! A Tiny Guide.">document shortcuts and cheat-sheets</a> in a convenient form.</p><p>I&#8217;m migrating from <a href="http://www.thinkingrock.com.au/" title="ThinkingRock homepage">Thinking Rock</a> to <a href="http://bargiel.home.pl/iGTD/" title="iGTD homepage">iGTD</a> as my <a href="http://en.wikipedia.org/wiki/Getting_Things_Done" title="Getting Things Done - Wikipedia">Getting Things Done</a> tool-of-choice.  One of the things I&#8217;m missing about Thinking Rock is its built-in ability to create PocketMods for the actions in the GTD system.  The only real easy way to create the PocketMod format was via a Flash applet or a Windows application.  Some have set up <a href="http://pocketmod.com/bb/comments.php?DiscussionID=27&amp;page=1#Item_0" title="PocketMod - PDF to pocketmod shell script - tomod.sh" class="broken_link" rel="nofollow">shell scripts</a> or worked with other programs, but I was looking for something as simple as the MacOS X print dialog box.  And with a little bit of <a href="http://www.apple.com/macosx/features/automator/" title="Automator (software)" rel="homepage nofollow" class="zem_slink broken_link">Automator</a>, Java, and shell scripting, it is possible!</p><p><h2>Step 1:  Get the &#8220;Multivalent&#8221; PDF Manipulation Toolkit</h2><br />The heavy lifting of this solution uses the <a href="http://multivalent.sourceforge.net/" title="Multivalent homepage">Multivalent PDF Manipulation Toolkit</a>.  This is a Java-based application that perform various actions (impose, compress, uncompress, info, encrypt / decrypt, split and merge, and validate) on PDF documents (as well as other file formats).  It is an open source application available under the GPL license (although <a href="http://multivalent.sourceforge.net/license.html" title="Multivalent license page">some components of Multivalent have commercial use restrictions</a>) available from SourceForge at this download URL: <a href="http://downloads.sourceforge.net/multivalent/Multivalent20060102.jar?modtime=1136221165&amp;big_mirror=0" title="Download Multivalend20060102.jar">Multivalent20060102.jar</a>.  Download that file and save it somewhere on your hard drive.  You&#8217;ll need to know the direct path location for the next step.</p><p><h2>Step 2:  Create the Automator Action</h2><br />Launch &#8220;<a href="http://www.apple.com/macosx/features/automator/" title="Apple - Mac OS X - Automator" class="broken_link" rel="nofollow">Automator</a>&#8221; (you&#8217;ll find it in the Applications folder).  It will start with a new, untitled work document.  From the left-most panel, select &#8220;Automator&#8221;, then from the panel just to the right of that click and drag &#8220;Run Shell Script&#8221; to the empty document on the right.<br /><img src="http://cdn.dltj.org/wp-content/uploads/2007/08/automator_drag1.png" alt="Dragging &quot;Run &quot; to empty windows" title="Dragging &#039;Run Shell Script&#039; to empty windows" border="0" width="693" height="415" /></p><p>In the &#8216;Run Shell Script&#8217; action, change &#8220;Pass input&#8221; to &#8220;as arguments&#8221; then replace &#8220;cat&#8221; in the command box with this (ignoring any line breaks that may appear here &#8212; this text should be entered without line breaks):<br /><blockquote><code>cat "$1" &gt; /tmp/temp$$.pdf &amp;&amp; java -classpath [location]/Multivalent20060102.jar tool.pdf.Impose -dim 2x4 -layout "1l,2r,8l,3r,7l,4r,6l,5r" -paper letter -verbose /tmp/temp$$.pdf 2&gt; /tmp/temp$$.err &amp;&amp; open /tmp/temp$$-up.pdf</code></p></blockquote><p>Replace [location] with the complete file path where you downloaded the Multivalent20060102.jar file.  The final results should look something like this:<br /><img src="http://cdn.dltj.org/wp-content/uploads/2007/08/automator_action1.png" alt="Completed action" title="Completed action" border="0" width="653" height="386" /></p><p>Now save this as &#8220;PocketModMac&#8221; in either the &#8220;/Library/PDF Services&#8221; directory (to make it available to all users of your machine) or to &#8220;Library/PDF Services&#8221; in your home directory for just you.</p><p><h2>Step 3:  Using PocketModMac</h2><br />Using this PocketMod generator is as simple as printing any document to any printer.  In the print dialog box, pull down the PDF menu and select &#8220;PocketModMac&#8221;.<br /><img src="http://cdn.dltj.org/wp-content/uploads/2007/08/print_dialog1.png" alt="Print Dialog" title="Print Dialog" border="0" width="598" height="553" /></p><p>After a few seconds, the Preview application will open up with the PocketMod-ed document.  Print this document as you would to any printer, then follow the directions for folding and cutting the page to create your booklet.<br /><img src="http://cdn.dltj.org/wp-content/uploads/2007/08/instructions1.png" alt="Folding Instructions" title="Folding Instructions" border="0" width="744" height="452" /></p><p><h2>Troubleshooting and Known Issues</h2><br />Using Automator to string together a Unix command line like this is moderately fragile and doesn&#8217;t provide for a lot of feedback on potential errors.  If it doesn&#8217;t work for you, one place to look for problems is in the /private/tmp directory for a file called <code>temp[number].err</code>.  The contents of that file may give clues as to what went wrong.</p><p>This isn&#8217;t necessarily a very nice solution because it leaves files laying around in the /private/tmp directory after it is done.  The <code>/etc/periodic/daily/500.daily</code> maintenance script will clean them out automatically after three days, but still &#8212; it is somewhat sloppy to leave them around.</p><div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://cdn.dltj.org/wp-content/uploads/2007/08/pixy.gif?x-id=93d42459-84b5-402a-8de5-c9f28a00a8a0" /></div>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/pocketmodmac/feed/</wfw:commentRss> <slash:comments>18</slash:comments> </item> <item><title>OhioLINK Position available: Systems Developer</title><link>http://dltj.org/article/ohiolink-system-developer/</link> <comments>http://dltj.org/article/ohiolink-system-developer/#comments</comments> <pubDate>Fri, 27 Jul 2007 13:19:02 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[OhioLINK]]></category> <category><![CDATA[programming]]></category><guid isPermaLink="false">http://dltj.org/2007/07/ohiolink-system-developer/</guid> <description><![CDATA[The Ohio Library and Information Network (OhioLINK) is seeking an energetic, creative individual to participate in the creation and maintenance of our internationally recognized set of digital library and electronic information services. OhioLINK serves the higher education population in the &#8230; <a href="http://dltj.org/article/ohiolink-system-developer/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2007/07/ohiolink-system-developer/"></abbr><p>The <a href="http://www.ohiolink.edu/" title="OhioLINK - The Ohio Library and Information Network">Ohio Library and Information Network (OhioLINK)</a> is seeking an energetic, creative individual to participate in the creation and maintenance of our internationally recognized set of digital library and electronic information services.  OhioLINK serves the higher education population in the State of Ohio with service to <a href="http://www.ohiolink.edu/members-info/" title="OhioLINK Member Libraries">over 85 colleges and universities</a>.</p><p>The position requires a four-year degree in Computer Science, or a graduate degree in Information or Library Science, or equivalent technical experience.  The candidate should have strong programming skills including experience with Perl and Java, and should be comfortable working in a Unix/Linux environment with open source development tools.  Experience with the following is highly desired: Apache Tomcat, JSP, XML, XSLT, SQL, Eclipse IDE.  Experience with the following is desirable: Cocoon, DSpace, Fedora Digital Repository, aspect-oriented programming.</p><p>Salary:  $49,000 minimum</p><p>If you are interested in this position, please send a resume, a summary statement of experience, and an indication of your salary expectations to <a href="mailto:resume@ohiolink.edu">resume@ohiolink.edu</a>.</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/ohiolink-system-developer/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>&#8220;Show Me The Code!!!&#8221; -or- It Isn&#8217;t Open Source Until We Can See the Source</title><link>http://dltj.org/article/show-me-the-code/</link> <comments>http://dltj.org/article/show-me-the-code/#comments</comments> <pubDate>Thu, 26 Jul 2007 14:06:24 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[Raw Technology]]></category> <category><![CDATA[culture]]></category> <category><![CDATA[open source]]></category> <category><![CDATA[programming]]></category><guid isPermaLink="false">http://dltj.org/2007/07/show-me-the-code/</guid> <description><![CDATA[There are days that I feel like Tom Cruise. No, I have no idea what it is like to be married to Nicole Kidman or Katie Holmes and I don&#8217;t have the secrets of Scientology. Let me rephrase: there are &#8230; <a href="http://dltj.org/article/show-me-the-code/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2007/07/show-me-the-code/"></abbr><p><img src="http://cdn.dltj.org/wp-content/uploads/2007/07/money_21.jpg" alt="Show Me the Money!" title="Show Me the Money!" align="right" width="200" height="108" border="0" /> There are days that I feel like Tom Cruise.  No, I have no idea what it is like to be married to Nicole Kidman or Katie Holmes and I don&#8217;t have the secrets of Scientology.  Let me rephrase:  there are days that I feel like Jerry Macguire, the character Tom Cruise played in <a href="http://imdb.com/title/tt0116695" title="IMDB: Show me the Money">the movie by the same name</a>.  Have you seen it?  Very early in the movie there is a scene where Jerry&#8217;s life as a top-tier sports agent is crumbling.  He is on the phone with what turns out to be his last client &#8212; desperately trying to keep his business.  The athlete (Cuba Gooding Jr. &#8212; I have no idea what it is like to be him either) gets Jerry to scream &#8220;Show Me The Money!&#8221; into the phone as a precondition for remaining his agent.  In that vein, here is what I&#8217;m screaming into this PowerBook.  (Imagine now that I am dancing around the room and standing on top of desks &#8212; not really a stretch for those that have seen my presentation style, I&#8217;ll admit.)</p><div style="text-align: center; font-weight: bolder; font-size: 150%; padding: 1.5em;">Show Me The Code</div><p>What has set off this rant, you might ask?  The trigger was <a href="http://onebiglibrary.net/story/dear-casey-bisson" title="Dear Casey Bisson&#039; posting in One Big Library">Dan Chud&#8217;s &#8220;Dear Casey&#8221; post</a>.  But it has been building up for a while.  Another prodding came two weeks ago when an OhioLINK staff member commented (paraphrasing) &#8220;the only people really interested in open source are those that want to take what others have created.&#8221;  Other instances include various discussions with people that tend to drift off at the point of &#8220;well, I&#8217;ll release it when I get a chance to clean it up&#8221; or &#8220;you know, there are so many institution-specific hard coded things in it&#8221;.  Look, folks &#8212; if you care about the code at all, you may never consider it clean enough to share with others. &#8212; and if there are institution-specific pieces in it, what incentive do you really have to generalize it.</p><p>I&#8217;d like to think I strive to practice what I&#8217;m preaching.  The OhioLINK DRC code is available for all to see as it is being built.  Now admittedly its development appears to come in fits and starts.  And there are definitely activities happening that are not registered in the Subversion code repository.  But it is there &#8212; mistakes, ugliness, refactoring, and hard-coded stuff.</p><p>If you want to ascribe to the principles of open source, well then welcome to the party.  But that means you have to come to the party with your code and not just your words.  Please don&#8217;t tease by saying that you&#8217;ll release your code but never do, even if you have the best intentions.  Open source is as much about giving back &#8212; improving your code by submitting patches, helping clean up the ugliness, and refactoring out institutional-specific pieces (because it would be in <em>my</em> interest to do so) &#8212; as it is about borrowing from others.  Or, in the words of Eric Steven Raymond in his book <i>The Cathedral and the Bazaar:</i> &#8220;<a href="http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html" title="Chapter 1, Section 4 of The Cathedral and the Bazaar">Release Early, Release Often</a>.&#8221;</p><p>So my hope is that this inspires you to release your own code.  This is not picking on any one individual or institution, but if it helps you may now believe that there is a virtual finger pointed to you if you have had one of these &#8220;I&#8217;ll release it into open source&#8221; conversations with me in the past.  Making source code available does take a few additional steps and a little bit of work, but the steps aren&#8217;t hard and the work isn&#8217;t significant compared to the effort you&#8217;ve already put into the code.  If you need help, please ask &#8212; in the comments here, on the Code4Lib (or similar) mailing list, in private correspondence, wherever.  If you need letters explaining the importance of releasing code or acknowledging your contribution to the open source community, let me know.  If you need further inspiration to follow the open source path, well, I&#8217;ll see what I can do.</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/show-me-the-code/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>Introducing &#8220;Planet Library SOA&#8221;</title><link>http://dltj.org/article/planet-librarysoa/</link> <comments>http://dltj.org/article/planet-librarysoa/#comments</comments> <pubDate>Tue, 19 Jun 2007 18:21:11 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[Library SOA]]></category> <category><![CDATA[library service-oriented architecture]]></category> <category><![CDATA[programming]]></category> <category><![CDATA[service-oriented architecture]]></category><guid isPermaLink="false">http://dltj.org/2007/06/planet-librarysoa/</guid> <description><![CDATA[Your Name(required) Email(valid email required) Receive an E-mail Copy of this Request? Website(required) Message &#160; cforms contact form by delicious:daysResources tagged with &#8216;librarysoa&#8216; in del.icio.us will also appear in the aggregator.MechanicsPlanet Library SOA is created using the Planet software &#8212; &#8230; <a href="http://dltj.org/article/planet-librarysoa/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2007/06/planet-librarysoa/"></abbr><div id="usermessage2a" class="cf_info "></div><form enctype="multipart/form-data" action="/tag/programming/feed/#usermessage2a" method="post" class="cform" id="cforms2form"><ol class="cf-ol"><li id="li-2-1" class=""><label for="cf2_field_1"><span>Your Name</span></label><input type="text" name="cf2_field_1" id="cf2_field_1" class="single fldrequired" value=""/><span class="reqtxt">(required)</span></li><li id="li-2-2" class=""><label for="cf2_field_2"><span>Email</span></label><input type="text" name="cf2_field_2" id="cf2_field_2" class="single fldemail fldrequired" value=""/><span class="emailreqtxt">(valid email required)</span></li><li id="li-2-3" class=""><label for="cf2_field_3" class="cf-before"><span>Receive an E-mail Copy of this Request?</span></label><input type="checkbox" name="cf2_field_3" id="cf2_field_3" class="cf-box-b"/></li><li id="li-2-4" class=""><label for="cf2_field_4"><span>Website</span></label><input type="text" name="cf2_field_4" id="cf2_field_4" class="single fldrequired" value="http://"/><span class="reqtxt">(required)</span></li><li id="li-2-5" class=""><label for="cf2_field_5"><span>Message</span></label><textarea cols="30" rows="8" name="cf2_field_5" id="cf2_field_5" class="area"></textarea></li></ol><fieldset class="cf_hidden"><legend>&nbsp;</legend> <input type="hidden" name="cf_working2" id="cf_working2" value="One%20moment%20please..."/> <input type="hidden" name="cf_failure2" id="cf_failure2" value="Please%20fill%20in%20all%20the%20required%20fields."/> <input type="hidden" name="cf_codeerr2" id="cf_codeerr2" value="Please%20double-check%20your%20verification%20code."/> <input type="hidden" name="cf_customerr2" id="cf_customerr2" value="yyn"/> <input type="hidden" name="cf_popup2" id="cf_popup2" value="nn"/></fieldset><p class="cf-sb"><input type="submit" name="sendbutton2" id="sendbutton2" class="sendbutton" value="Send Comment"/></p></form><p class="linklove" id="ll2"><a href="http://www.deliciousdays.com/cforms-plugin"><em>cforms</em> contact form by delicious:days</a></p><p>Resources tagged with &#8216;<a href="http://del.icio.us/tag/librarysoa" title="Pages tagged with &amp;quot;librarysoa&amp;quot; on del.icio.us">librarysoa</a>&#8216; in del.icio.us will also appear in the aggregator.</p><p><h2>Mechanics</h2><br /><i>Planet Library SOA</i> is created using the <a href="http://www.planetplanet.org/" title="Planet Feed Reader">Planet</a> software &#8212; a tool for aggregating and republishing RSS feeds.  In the case where the contributor runs the WordPress software, <i>Planet Library SOA</i> subscribes to the RSS feed of a category or tag from that blog.  In the case where the contributor runs the Movable Type software, a Yahoo! Pipe is used to extract SOA-related postings from the blog&#8217;s general feed.  (For example, see this <a href="http://pipes.yahoo.com/pipes/pipe.edit?_id=rtYodYEe3BG6g7sVJhOy0Q" title="http://pipes.yahoo.com/pipes/pipe.edit?_id=rtYodYEe3BG6g7sVJhOy0Q">Yahoo! Pipe for Lorcan Dempsey&#8217;s blog</a>.  My gratitude goes out to Stephen Anthony for <a href="http://ea.typepad.com/enterprise_abstraction/2007/06/yahoo_pipes.html" title="Enterprise Abstraction: Yahoo Pipes">his example on how to get Yahoo! Pipes to extract content from feeds</a> and Ryan Gallagher for <a href="http://discuss.pipes.yahoo.com/Message_Boards_for_Pipes/threadview?m=tm&#038;bn=pip-DeveloperHelp&#038;tid=905&#038;mid=1632&#038;tof=2&#038;rt=2&#038;frt=2&#038;off=1" title="http://discuss.pipes.yahoo.com/Message_Boards_for_Pipes/threadview?m=tm&#038;bn=pip-DeveloperHelp&#038;tid=905&#038;mid=1632&#038;tof=2&#038;rt=2&#038;frt=2&#038;off=1">a workaround</a> to <a href="http://discuss.pipes.yahoo.com/Message_Boards_for_Pipes/threadview?m=tm&#038;bn=pip-DeveloperHelp&#038;tid=905&#038;mid=1332&#038;tof=2&#038;rt=2&#038;frt=2&#038;off=1" title="http://discuss.pipes.yahoo.com/Message_Boards_for_Pipes/threadview?m=tm&#038;bn=pip-DeveloperHelp&#038;tid=905&#038;mid=1332&#038;tof=2&#038;rt=2&#038;frt=2&#038;off=1">a bug in Pipes</a>.)</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/planet-librarysoa/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Presentation Summary: &#8220;MPTStore: Implementing a fast, scalable, and stable RDBMS-backed triplestore for Fedora and the NSDL&#8221;</title><link>http://dltj.org/article/fedora-mptstore/</link> <comments>http://dltj.org/article/fedora-mptstore/#comments</comments> <pubDate>Mon, 29 Jan 2007 19:03:09 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[Fedora]]></category> <category><![CDATA[Meeting]]></category> <category><![CDATA[Raw Technology]]></category> <category><![CDATA[icor2007]]></category> <category><![CDATA[National Science Digital Library]]></category> <category><![CDATA[programming]]></category> <category><![CDATA[RDF]]></category> <category><![CDATA[semantic web]]></category><guid isPermaLink="false">http://dltj.org/2007/01/fedora-mptstore/</guid> <description><![CDATA[Chris Wilper gave this presentation on behalf of the work that he and Aaron Birkland did to improve the performance of the Fedora Resource Index. Presentation slides via SlideShareVersion 2.0 of the Fedora digital object repository software added a feature &#8230; <a href="http://dltj.org/article/fedora-mptstore/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2007/01/fedora-mptstore/"></abbr><p>Chris Wilper gave this presentation on behalf of the work that he and Aaron Birkland did to improve the performance of the Fedora Resource Index.</p><div style="margin-left: 5em;"><object type="application/x-shockwave-flash" data="https://s3.amazonaws.com:443/slideshare/ssplayer.swf?id=20618&#038;doc=mptstore-a-fast-scalable-and-stable-resource-index-1484" width="425" height="348"><param name="movie" value="https://s3.amazonaws.com:443/slideshare/ssplayer.swf?id=20618&#038;doc=mptstore-a-fast-scalable-and-stable-resource-index-1484" /></object><br /><span style="font-size: 85%"><a href="http://www.slideshare.net/cwilper/mptstore-a-fast-scalable-and-stable-resource-index" title="MPTStore: A Fast, Scalable, and Stable Resource Index &amp;raquo; Slideshare">Presentation slides via SlideShare</a></span></div><p>Version 2.0 of the <a href="http://www.fedora.info/" title="Fedora">Fedora digital object repository software</a> added a feature called the Resource Index (RI).  Based on <a href="http://www.w3.org/RDF/" title="http://www.w3.org/RDF/">Resource Description Framework</a> (RDF) triples, the RI provided quick access to relationships between objects as well as to the descriptive elements of the object itself.  After about two years of use using the <a href="http://www.kowari.org/" title="kowari">Kowari software</a>, the RI has pointed to a number of challenges for &#8220;triplestores&#8221;:  scalability (few triplestores are designed for greater than 100 million triples); performance; and stability (frequent &#8220;rebuilds&#8221;).</p><p>The real motivation behind experimenting with a new triplestore, however, was the NSDL use case.  The <a href="http://nsdl.org/" title="The National Science Digital Library">National Science Digital Library</a> (NSDL) is a moderately large repository (4.7 million objects, 250 million triples) with a lot of write activity (driven by periodic OAI harvests; primarily mixed ingests and datastream modifications).  The NSDL data model also includes existential/referential integrity constraints that must be enforced.  Querying the RI to determine correct repository state proved to be difficult:  Kowari is aggressively buffering triple, sometimes on the order of seconds, before writing them to disk.  Flushing the buffer after every write is also computationally expensive (hence the drive to use buffers in the first place).</p><p>The NSDL team also encountered corruption under concurrent use and with abnormal shutdowns, forcing the rebuild of the triplestore.  And the solution was not scaling well; performance was becoming notably worse.  In looking for solutions other triplestores were considered but rejected.  Using a RDBMS seemed attractive &#8212;  efficient transactions, very stable, generally speedy &#8212; but a &#8220;one big table&#8221; paradigm to store all of the relations did not seem to give them a desired scalability.</p><p>NSDL developers observed that total number of distinct predicates is much lower than the number of predicates or objects;  NSDL has about 50 distinct predicates.  Based on this observation, their solution, called &#8220;Mapped Predicate Tables,&#8221; creates a table for every predicate in the triplestore.  This has several advantages:  a low computational cost for triple adds and deletes, queries for known predicates are fast, complex queries benefit from the relatively mature RDBMS planner having finer-granularity statistics and query plans, and flexible data partitioning to help address scalability.  This solution comes with several disadvantages, however:  one needs to manage predicate to table mapping, complex queries crossing many predicates require more effort to formulate, and with a naive approach simple unbound queries scale linearly with the number of predicates.</p><p>So the NSDL team created the <a href="http://mptstore.sourceforge.net/" title="MPTStore 0.9.1 Documentation">MPTStore triplestore</a> and contributed it back to the Fedora core developers for use by the community.  MPTStore is a Java library that handles all of the predicate mapping and accounting behind the scenes.  The basic API remains the same as for other triplestores, performing triple writes and queries, and the library hides all of the implementation details of translating queries from a particular language (SPO, SPARQL) into SQL statements.  The library is also designed to expose transaction/connection semantics should the developer wish to have direct access to the predicate tables.</p><p>A solution like MPTStore is well suited for NSDL use case.  The NSDL team was very familiar with the operations of RDBMS administration: performance tuning, backups, etc.  The stored triplestore data is transparent and &#8220;hackable&#8221; &#8212; adhoc SQL queries and analysis are relatively simple.  In fact, the RDBMS triplestore helped track down Fedora middleware bugs that resulted in an inconsistent state.  Fixing these bugs also improved the performance of the Kowari-based RI.</p><p>[Updated 20070129T1447 to include links to Chris' presentation on SlideShare.]</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/fedora-mptstore/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Scripted Searches for Java Code in Popular Source Code Search Engines</title><link>http://dltj.org/article/java-code-searches/</link> <comments>http://dltj.org/article/java-code-searches/#comments</comments> <pubDate>Fri, 19 Jan 2007 18:58:19 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[Raw Technology]]></category> <category><![CDATA[Google]]></category> <category><![CDATA[java]]></category> <category><![CDATA[open source]]></category> <category><![CDATA[programming]]></category><guid isPermaLink="false">http://dltj.org/2007/01/java-code-searches/</guid> <description><![CDATA[Sometimes the best way to solve a programming problem is to see how others have done the same thing. When that happens, having immediate access to the various search engines helps get you back on track quickly. Here are OpenSearch &#8230; <a href="http://dltj.org/article/java-code-searches/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2007/01/java-code-searches/"></abbr><p>Sometimes the best way to solve a programming problem is to see how others have done the same thing.  When that happens, having immediate access to the various search engines helps get you back on track quickly.  Here are <a href="http://www.opensearch.org/" title="http://www.opensearch.org/">OpenSearch plug-ins</a> (suitable for Firefox and MSIE7) that will search the Java code in five of the more popular source code search engines.</p><p><h2>Krugle</h2><br />Krugle is not only a source code search engine, but an entire environment for developers to review an comment on code.  It supports code search by crawling, parsing and indexing code found in all open source repositories, as well as code that exists in archives, mailing lists, blogs, and web pages.  Krugle also provides answers to code-related technical questions: related code, dependencies, licensing information, compatibility requirements, bug reports and news group postings. Finally, it lets one add comments to entire code files or specific lines of code, allowing for useful code-centric communication between developers.</p><p><a href="javascript:addProvider(&#039;http://www.searchplugins.net/createos.aspx?number=4228&#039;);void(0)" title="">Install Krugle Java Code Search</a> for Firefox and MSIE7.  Plug-in source:</p><div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">&lt;!-- Generated by searchplugins.net search plugin generator --&gt;</span>
<span style="color: #808080; font-style: italic;">&lt;!-- http://www.searchplugins.net/generate.aspx --&gt;</span>
<span style="color: #808080; font-style: italic;">&lt;!-- Plugin list available at http://www.searchplugins.net/pluginlist.aspx --&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;opensearchdescription<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;shortname<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Krugle Java Code Search<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/shortname<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Search Krugle Java Code Search<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;tags<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>krugle java programming code<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/tags<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;image</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;16&quot;</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;16&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;image/x-icon&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>http://www.krugle.com/favicon.ico<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/image<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/html&quot;</span> <span style="color: #000066;">method</span>=<span style="color: #ff0000;">&quot;GET&quot;</span> <span style="color: #000066;">template</span>=<span style="color: #ff0000;">&quot;http://www.krugle.com/kse/files?query={searchTerms}&amp;lang=java&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;inputencoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>UTF-8<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/inputencoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;adultcontent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>false<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/adultcontent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/opensearchdescription<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div><p><h2>Koders</h2><br />Koders is a repository of open source project code.  From their own description of themselves:</p><blockquote><p><a href="http://koders.com/" title="Koders - Source Code Search Engine">Koders.com</a> is the leading search engine for open source code. Our source code optimized search engine provides developers with an easy-to-use interface to search for source code examples and discover new open source projects which can be leveraged in their applications.</p></blockquote><p>Note also that you can <a href="http://www.koders.com/info.aspx?c=tools#IDEs" title="Koders Downloadable Tools">get a plugin for Eclipse</a> to perform the searches right from the IDE. <a href="javascript:addProvider(&#039;http://www.searchplugins.net/createos.aspx?number=4224&#039;);void(0)" title="">Install Koders Java Search</a> in Firefox or MSIE7.  Plug-in source:</p><div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">&lt;!-- Generated by searchplugins.net search plugin generator --&gt;</span>
<span style="color: #808080; font-style: italic;">&lt;!-- http://www.searchplugins.net/generate.aspx --&gt;</span>
<span style="color: #808080; font-style: italic;">&lt;!-- Plugin list available at http://www.searchplugins.net/pluginlist.aspx --&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;opensearchdescription<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;shortname<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Koders &quot;Java&quot; Search<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/shortname<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Search Koders for Java code<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;tags<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>koders programming java<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/tags<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;image</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;16&quot;</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;16&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;image/x-icon&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>http://www.koders.com/favicon.ico<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/image<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/html&quot;</span> <span style="color: #000066;">method</span>=<span style="color: #ff0000;">&quot;GET&quot;</span> <span style="color: #000066;">template</span>=<span style="color: #ff0000;">&quot;http://www.koders.com/default.aspx?s={searchTerms}&amp;btn=Search&amp;la=Java&amp;li=*&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;inputencoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>UTF-8<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/inputencoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;adultcontent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>false<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/adultcontent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/opensearchdescription<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div><p><h2>Codefetch</h2><br />Codefetch is a search engine for source code from published books.  Oftentimes, publishers and/or authors will make the example source code available online.  Codefetch indexes those bits of sample source code and provides links to bookstores where you can buy the book associated with the code.  Be sure to check out their <a href="http://www.codefetch.com/examples.html" title="codefetch help and examples" class="broken_link" rel="nofollow">help and examples</a> screen for the more sophisticated search and limiting parameters.</p><p><a href="javascript:addProvider(&#039;http://www.searchplugins.net/createos.aspx?number=4225&#039;);void(0)" title="">Install Codefetch Java Search</a> in Firefox or MSIE7.  Plug-in source:</p><div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">&lt;!-- Generated by searchplugins.net search plugin generator --&gt;</span>
<span style="color: #808080; font-style: italic;">&lt;!-- http://www.searchplugins.net/generate.aspx --&gt;</span>
<span style="color: #808080; font-style: italic;">&lt;!-- Plugin list available at http://www.searchplugins.net/pluginlist.aspx --&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;opensearchdescription<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;shortname<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Search Codefetch for Java Code<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/shortname<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Search Search Codefetch for Java Code<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;tags<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>codefetch programming java<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/tags<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;image</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;16&quot;</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;16&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;image/x-icon&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>http://www.codefetch.com/favicon.ico<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/image<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/html&quot;</span> <span style="color: #000066;">method</span>=<span style="color: #ff0000;">&quot;GET&quot;</span> <span style="color: #000066;">template</span>=<span style="color: #ff0000;">&quot;http://www.codefetch.com/search?qy={searchTerms}&amp;lang=java&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;inputencoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>UTF-8<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/inputencoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;adultcontent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>false<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/adultcontent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/opensearchdescription<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div><p><h2>O&#8217;Reilly Publishing</h2><br />Another source of edited example code is from O&#8217;Reilly Publishing.  This, too, is &#8220;in the labs&#8221; so it may go away at some point.  In the meantime, one can &#8220;find relevant sample code from nearly 700 O&#8217;Reilly books.  The database currently contains over 123,000 individual examples, composed of 2.6 million lines of code — all edited and ready to use.&#8221;  Do make note of the <a href="http://www.oreilly.com/pub/a/oreilly/ask_tim/2001/codepolicy.html" title="O&#039;Reilly -- O&#039;Reilly Policy on Re-Use of Code Examples from Books">O&#8217;Reilly Policy on Re-Use of Code Examples from Books</a>.</p><p><a href="javascript:addProvider(&#039;http://www.searchplugins.net/createos.aspx?number=4227&#039;);void(0)" title="">Install O&#8217;Reilly Java Code Search</a> in Firefox and MSIE7.  Plug-in source:</p><div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">&lt;!-- Generated by searchplugins.net search plugin generator --&gt;</span>
<span style="color: #808080; font-style: italic;">&lt;!-- http://www.searchplugins.net/generate.aspx --&gt;</span>
<span style="color: #808080; font-style: italic;">&lt;!-- Plugin list available at http://www.searchplugins.net/pluginlist.aspx --&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;opensearchdescription<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;shortname<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>O'Reilly Java Code Search<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/shortname<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Search O'Reilly Java Code Search<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;tags<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>o'reilly java programming code<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/tags<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;image</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;16&quot;</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;16&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;image/x-icon&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>http://labs.oreilly.com/favicon.ico<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/image<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/html&quot;</span> <span style="color: #000066;">method</span>=<span style="color: #ff0000;">&quot;GET&quot;</span> <span style="color: #000066;">template</span>=<span style="color: #ff0000;">&quot;http://labs.oreilly.com/search.xqy?t=code&amp;q={searchTerms}+cat%3Ajava&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;inputencoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>UTF-8<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/inputencoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;adultcontent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>false<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/adultcontent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/opensearchdescription<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div><p><h2>Google Code Search</h2><br />In the nebulous Google Labs (will it disappear?  will it stay in the labs?  will it become a &#8220;normal&#8221; service?) there is a Code Search service.  This is how Google describes it:</p><blockquote><p>Google Code Search helps you find function definitions and sample code by giving you one place to search publicly accessible source code hosted on the Internet. With Google Code Search, you can:</p><ul><li>Use regular expressions to search more precisely</li><li>Restrict your search by language, license or filename</li><li>View the source file with links back to the entire package and the webpage where it came from</li></ul></blockquote><p>The use of regular expressions seems to give Google an edge over the others, although I don&#8217;t think the Google service is as comprehensive in coverage as Koders.</p><p><a href="javascript:addProvider(&#039;http://www.searchplugins.net/createos.aspx?number=4226&#039;);void(0)" title="">Install Google Code Search for Java</a> into Firefox or MSIE7.  Plug-in source:</p><div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">&lt;!-- Generated by searchplugins.net search plugin generator --&gt;</span>
<span style="color: #808080; font-style: italic;">&lt;!-- http://www.searchplugins.net/generate.aspx --&gt;</span>
<span style="color: #808080; font-style: italic;">&lt;!-- Plugin list available at http://www.searchplugins.net/pluginlist.aspx --&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;opensearchdescription<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;shortname<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Google Code Search for Java<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/shortname<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Search Google Code Search for Java<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;tags<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>googlecodesearch java programming google<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/tags<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;image</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;16&quot;</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;16&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;image/x-icon&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>http://www.google.com/favicon.ico<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/image<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/html&quot;</span> <span style="color: #000066;">method</span>=<span style="color: #ff0000;">&quot;GET&quot;</span> <span style="color: #000066;">template</span>=<span style="color: #ff0000;">&quot;http://www.google.com/codesearch?as_q={searchTerms}&amp;btnG=Search+Code&amp;hl=en&amp;as_lang=java&amp;as_license_restrict=i&amp;as_license=&amp;as_package=&amp;as_filename=&amp;as_case=&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;inputencoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>UTF-8<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/inputencoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;adultcontent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>false<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/adultcontent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/opensearchdescription<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div> ]]></content:encoded> <wfw:commentRss>http://dltj.org/article/java-code-searches/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Getting Around Drupal&#8217;s Prohibition of @ Characters in User Ids</title><link>http://dltj.org/article/drupal-at-sign/</link> <comments>http://dltj.org/article/drupal-at-sign/#comments</comments> <pubDate>Fri, 19 Jan 2007 16:46:06 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[Raw Technology]]></category> <category><![CDATA[Drupal]]></category> <category><![CDATA[networking]]></category> <category><![CDATA[programming]]></category> <category><![CDATA[system administration]]></category><guid isPermaLink="false">http://dltj.org/2007/01/drupal-at-sign/</guid> <description><![CDATA[A while back we created an LDAP directory to consolidate account information for various back-room services, and when we created it we decided to use the individual&#8217;s e-mail address as the account identifier (uid in LDAP-speak). It seemed like the &#8230; <a href="http://dltj.org/article/drupal-at-sign/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2007/01/drupal-at-sign/"></abbr><p>A while back we created an LDAP directory to consolidate account information for various back-room services, and when we created it we decided to use the individual&#8217;s e-mail address as the account identifier (<tt>uid</tt> in LDAP-speak).  It seemed like the logical thing to do &#8212; it is something that the user knows and it is a cheap and easy way to assume that the account identifiers will be unique.  This is not uncommon for many internet services, of course.</p><p>Now we&#8217;re bring up a <a href="http://drupal.org/" title="drupal.org | Community plumbing">Drupal</a> content management system and of course want to tie the authentication into the existing LDAP directory.  The initial configuration appeared to work, but there were odd, unexplained failures &#8212; most notably, Drupal would not consider it a &#8216;real&#8217; account because it didn&#8217;t have an e-mail field.  Even weirder was the fact that we configured Drupal to know exactly which LDAP attribute to use as the e-mail address (<tt>mail</tt>, in LDAP-speak).  It wasn&#8217;t until one of our system engineers wondered out loud if the at-sign (&#8216;@&#8217;) in the user id wasn&#8217;t causing problems that we started making progress towards a solution.</p><p>As it turns out, he was right.  Without spending so much time in the guts of the Drupal code to know exactly if this is true, it seems like Drupal wants to reserve the &#8216;<tt>@something</tt>&#8216; construct for inter-Drupal authentication.  In other words, if you have an account on one Drupal server (let&#8217;s call it <em>DrupalA</em>) and want to access a second (let&#8217;s call it <em>DrupalB</em>) &mdash; and if the two servers agree to share user accounts &mdash; the account from <em>DrupalA</em> would be recorded in the database of <em>DrupalB</em> as &#8220;<tt>UserId@DrupalA</tt>&#8220;.</p><p>The &#8216;at&#8217; symbol for us, though, is just a normal part of an e-mail address.  We really didn&#8217;t want to reconstruct our LDAP account scheme, so the best choice seemed to be to find a way to trick Drupal into accepting these account identifiers.  This, unfortunately, was no easy task.  I couldn&#8217;t find the root cause of the problem, but did diagnose enough of the symptoms to force a patch into the system.  The patch, in the form of a new module (code included below) forces the account to have two necessary attributes that seem to go missing whenever a &#8216;@&#8217; character appears in the user id.  If you have similar problems, I can&#8217;t claim that this will work for you, nor can I guarantee this approach will be supportable in the future.  All&#8217;s I know is that it seems to work for us in our situation right now.</p><div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>?php
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> olinkldap_help<span style="color: #009900;">&#40;</span><span style="color: #000088;">$section</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$section</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'admin/modules#olinkldap'</span><span style="color: #339933;">:</span>
      <span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'olinkldap;
      break;
    case '</span>admin<span style="color: #339933;">/</span>modules<span style="color: #666666; font-style: italic;">#description':
</span>    <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'admin/help#olinkldap'</span><span style="color: #339933;">:</span>
      <span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> t<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Sets up OhioLINK-specific LDAP parameters.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$output</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> olinkldap_settings<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> olinkldap_user<span style="color: #009900;">&#40;</span><span style="color: #000088;">$op</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span><span style="color: #000088;">$edit</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span><span style="color: #000088;">$user</span><span style="color: #339933;">,</span> <span style="color: #000088;">$category</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$op</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'load'</span><span style="color: #339933;">:</span>
      olinkldap_user_load<span style="color: #009900;">&#40;</span><span style="color: #000088;">$user</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> olinkldap_user_load<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span><span style="color: #000088;">$user</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// Calculate the DN for the user -- you'll need to adjust this to match your LDAP base DN</span>
  <span style="color: #000088;">$ldap_dn</span><span style="color: #339933;">=</span><span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;uid=<span style="color: #009933; font-weight: bold;">%s</span>,ou=People,dc=somewhere,dc=outthere&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$user</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>name<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// Create a new array with the two LDAP-specific values that seem to be missing.</span>
  <span style="color: #000088;">$forced_data</span><span style="color: #339933;">=</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ldap_authentified'</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'ldap_dn'</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #000088;">$ldap_dn</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// It seems like this should work, but it doesn't (it throws a segmentation fault)</span>
    <span style="color: #666666; font-style: italic;">//  user_save($user_edit,array($forced_data);</span>
    <span style="color: #666666; font-style: italic;">// so we're going to interact directly with the database</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$user</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>uid<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// Get the 'data' field for the user and put it in the $data array</span>
    <span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">unserialize</span><span style="color: #009900;">&#40;</span>db_result<span style="color: #009900;">&#40;</span>db_query<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SELECT data FROM {users} WHERE uid = %d'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$user</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>uid<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// Put all of the attributes from $forced_data into $data</span>
    <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$forced_data</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$value</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #666666; font-style: italic;">// Reserialize the $data array and update it in the database</span>
    <span style="color: #000088;">$v</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">serialize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    db_query<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;UPDATE {users} SET data='<span style="color: #009933; font-weight: bold;">%s</span>' WHERE uid=<span style="color: #009933; font-weight: bold;">%d</span>&quot;</span><span style="color: #339933;">,</span><span style="color: #990000;">array_merge</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span><span style="color: #339933;">,</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$user</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>uid<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
?<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span></pre></div></div><p>Save this as &#8216;olinkldap.module&#8217;, update the DN to reflect your LDAP server&#8217;s base DN (see comment in code), copy it into your Drupal modules directory, and activate it.  Your &#8216;@&#8217;-impaired userids should start working again.  If you are using the inter-Drupal account sharing (we&#8217;re not) this might break something for you.  That&#8217;s not interesting for us, so I&#8217;m not testing it against that condition.  If you use this and find that it works or doesn&#8217;t work, or you have a better way of solving the problem, please leave a comment or traceback&#8230;</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/drupal-at-sign/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Served from: dltj.org @ 2012-05-24 15:51:30 by W3 Total Cache -->
