HideText

      1 Comment on HideText

About a month ago I learned the word steganography during a briefing on internet security. Didn’t think too much more about it but then today I stumbled across this somewhat steganographic service–aimed primarily at hiding messages from machines (not people).

HideText (beta) exists to do one simple thing–convert text to images so that the ‘content’ of the text message isn’t immediately viewable by web robots, spam crawlers, net sniffers, etc. You type in a word, phrase, email address or hidetextwhatever and the site creates a GIF of your text. You can download it and use it (useful for putting your email address on a website, for example) or use the URL that HideText gives you (which will then serve the image link up for you. With plenty of webservers here in the Systems Office, having HideText host these little gifs doesn’t make much sense…but if you don’t have ready access to a server, then HideText’s offer to host the image file for you is the way to go. They say they’ll keep the image file up forever (or at least a year). I suppose if too many people begin storing and requesting large text message image files, the bandwidth costs for HideText will bring on a new business model.

http://www.hidetext.net/index.php

Here’s my email address as a HideText generated image (take that spambots!):

RSS feed from Voyager

      9 Comments on RSS feed from Voyager

Had a request so here is the perl code for creating the ‘on-the-fly’ RSS feed, based on a call number prefix.

This script uses the intermediate newbooks.txt file that Michael Doran’s newbooks program creates. It isn’t necessarily the best perl code but if you realize that, you probably have the power to fix it up. I gave some thought to optimizing the thing (in terms of where processing gets done) but I’m sure it could be tuned further.

Basically, the URL to call the feed looks like this:

http://myserver.edu/cgi-bin/newrss.pl?QA76

which will produce a feed of books that have QA76 in the call number. It uses the ‘squashed’ callnumber (without any spaces) to do the comparison. Anything after the ‘?’ in the URL must be at the start of the call number to be retrieved.

#!/m1/shared/perl/5.8.5-09/bin/perl
# this program processes a flat file created by M. Doran's 
# newbooks system (newbooks.txt)
# author of this program:
# w. grotophorst, (c) 2005, Lost Packet Planet
# Program may be freely copied, modified & improved.
#########################################
#
# less variable variables
#
$fromlink = "http://lso.gmu.edu/index.php";
$inputfile = "newbooks.txt";
$NumToFeed = "15";
$URL2Voyager = "http://magik.gmu.edu/cgi-bin/Pwebrecon.cgi?BBID=";

#########################################

$ToFind = $ENV{'QUERY_STRING'};
$ToFind =~ tr/+/ /;
$ToFind =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$ToFind =~ tr/\cM/\n/;
$ToFind =~ s/[a-z]/[A-Z]/;

$titlestr = "New Books - University Libraries - ".$ToFind;
open(INFILE,$inputfile);
print "Content-type: text/xml\n\n";

print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
print "<!DOCTYPE rss PUBLIC ";
print "\"-//Netscape Communications//DTD RSS 0.91//EN\"\n";
print "\"http://my.netscape.com/publish/formats/rss-0.91.dtd\">\n";
print "<rss version=\"0.91\">\n";
print "<channel>\n";
print "<title>$titlestr</title>\n";
print "<link>$fromlink</link>\n";

$line = <INFILE>;
$foundit = 0;
$numfed = 0;

while ($line ne ""){

if ($numfed < $NumToFeed) {

# check string to see if characters matching call# stem appear anywhere, if
# not, go on to next line from newbooks.txt 


$t = index($line,$ToFind);


if ($t >= 0) {

    # call # stem is in the line, blow it apart & see if it is actually in call#
    # section...the 8th data element that M. Doran's system puts on the line
    $line =~ s/&/&amp;/g;
    $line =~ s/>/&gt;/g;
    $line =~ s/</&lt;/g;
    $line =~ s/"/&quot;/g;
    $line =~ s/'/&apos;/g;

        
    @itemdata = split(/\t/,$line);


    $call = @itemdata[7];

    $t = index($call,$ToFind);
    if ($t == 0) {

    # now assign other 'split' values from the itemdata array

    $bibid = @itemdata[0];
    $author= @itemdata[1];
    $title = @itemdata[2];
    $publ  = @itemdata[4];
    $location = @itemdata[5];

    $numfed++;

    print "<item>\n";
    print "<title>$title</title>\n";
    print "<link>$URL2Voyager$bibid</link>\n";
    print "<description>$author $title $publ $location $call</description>\n";
    print "</item>\n";
    }
   }
  }
 $line = <INFILE>;
 }

print "</channel>\n</rss>\n";
close INFILE;

Codingmonkeysp.s., You may not know how hard it was to get this code listing to appear correctly in this blog entry…but if you do then this will qualify as “tip of the week.”
I tried a couple of WordPress plugins but nothing seemed to work right (code was being rendered as HTML or worse, WordPress was making bad assumptions about what I was trying to do). Finally, I opened the perl script in SubEthaEdit on my desktop (to do some line shortening) and when I selected “all” and got ready to copy it back to an xterm window, there was the option I needed, had never been more than a simple right mouse click away: “Copy as XHTML“. SubEthaEdit even threw in a bit of XHTML markup to make the little black box around the entry. Yet another reason that’s a great editor.

Integrate RSS feeds into your HTML page

      1 Comment on Integrate RSS feeds into your HTML page

Was asked the other day by a librarian if it was possible to pull an RSS newsfeed in from some other site for a web page she was working on. I said, sure, we run a package on one of our servers that can do it for you (MagpieRSS). Of course, the limtation is that her page needed to be on the server running the MagpieRSS software.

Then on Friday I had a really informative discussion with Jim Robertson (of New Jersey Institute of Technology), talking about some really interesting things he’s doing with his Voyager OPAC. Just to digress a moment, one neat feature he’s implemented is a real-time check on the circulation activity for a particular title in the OPAC.

Anyway, while we were talking he told me about Feed2JS that’s run by Alan Levine out at Maricopa Community College. Feed2JS runs a service which takes an URL to an RSS feed and sends back a stream of Javascript that enables the user to incorporate the RSS content into their web page.

Alan makes his Feed2JS service freely available on a server at Maricopa but he also distributes the source code under a GNU General Public License. He asks that if you install the service on a local machine, you advertise availability (to help share the workload).

I’ve installed a Feed2JS service on timesync…and spent a bit of time this morning reworking the Library Systems Office webpage to demo a couple of feeds (retiring my “native” magpierss in the process). With the great support on the Feed2JS home page for things like CSS stylings for feeds, it’s a much richer service than my earlier MagpieRSS software performed.

Incidentally, Feed2JS requires PHP on the server and includes a copy of MagpieRSS in the install package. Installation is pretty trivial.

On timesync, it’s running at:

http://timesync.gmu.edu/feed/feed2js.php

To understand how you incorporate this service into your webpage, start on the “Build A Feed” page. When your finished, just substitute timesync.gmu.edu for the marciopa server’s name…the rest of the URL remains the same.

A dynamic new books RSS feed

      4 Comments on A dynamic new books RSS feed

Working through my email today (trying to make a bit of space on the server), I happened upon a message from a listserv that I had skipped over a couple of months ago. Douglas Anderson (of the University of Alabama) was asking about RSS and the correct XML syntax to encode a canned URL to search a Voyager system by ISBN number. I got curious about what he might be up to and wrote a quick email asking if his question ever got answered. He quickly wrote back, letting me know that it wasn’t an issue any longer as the Unicode version of Voyager supported a BIB ID# search without a lot of fancy HTML coding.

He then pointed me to his Newbooks RSS feed.

http://www.lib.ua.edu/newnotable/newbksviarss.htm

Wow, I thought…what a great idea. I wrote again and he was nice enough to share a few thoughts with me. During that conversation (about things DBI, Voyager, Perl and so on) I realized that we were both satisfied users of Michael Doran’s newbooks software package for Voyager systems.

Not ready to try generating 300+ feeds like Douglas does down at Alabama, I decided to begin experimenting with trying to build an on-demand CGI generator for the information. Having just talked a bit about Michael Doran’s newbooks program, I realized he had already done much of the heavy lifting for this project (using a DBI interface to Oracle to pull the author, title, publication info, call number and shelving location for new books out of a Voyager system) had already been done. I was about to begin prying into the secrets of his code (Perl/DBI), when I noticed that the flat file his program generates (which I already run daily) could be used as the datasource for my CGI process…which made real-time generation much more feasible. I hacked together a short Perl process to query the newbooks.txt file and produce an RSS feed for a particular call number prefix. For my tests I went with QA.

Here’s a rough first cut…it creates an RSS feed and in each item there’s a link to our online catalog for more information on that title.

http://breeze.gmu.edu/cgi-bin/rss_qa.pl

It looks nice in Safari (which offers in-browser sort options) and Opera’s built-in RSS reader works OK (where each item looks like an email message) but it looks kinda odd/pointless in Firefox.

Two hours into teaching myself XML, I’ve already learned that you need to convert “&” signs into &amp; or XML parsers balk. I can’t imagine what I’m going to discover next…

There’s more to do on this project but I hope to develop a CGI that lets the user specify the call number range and receive an RSS feed in return. Then our subject reference librarians can just include the URL on their webpages…

If you’d like the bit of perl I used for this experiment, drop me a line. If you have a better way to do this, please let me know…

Update: Have now managed to hack out a little program that takes an argument and sends out 15 new books that begin with that call number stem. Here’s the example for TK titles:

http://breeze.gmu.edu/cgi-bin/newrss.pl?TK

Opera 8.5 is now free

      Comments Off on Opera 8.5 is now free

Opera

Opera has removed the banner ads and licensing requirement in their 8.5 browser…it’s free.

From their site:

Opera has removed the banners, found within our browser, and the licensing fee. Opera’s growth, due to tremendous worldwide customer support, has made today’s milestone an achievable goal.

http://www.opera.com

Apple Digital Campus Exchange

      Comments Off on Apple Digital Campus Exchange

ADCE Viewed a webcast today from the Apple Digital Campus Exchange, a new community devoted to use of Apple products in Higher Ed. A quick tour around the site will reveal that libraries aren’t mentioned…something that looked like an oversight from my desktop. As the webcast was underway (using the cast:stream player and quicktime) I fed a question into the moderator…asking about a forum or focus on libraries in this context.

Moments later, the moderator made reference to my comment, instantly promoting me in the process:

“Wally, who is the Director of Libraries at George Mason University, asks whether we’ll be adding a focus on libraries at the exchange.” They agreed it was clearly part of education and seemed to be saying they’d likely add it. I completely forgot to send a followup message demoting myself …

If you’re interested in what innovators are doing with Apple products in Higher Ed or have questions you’d like to discuss with peers who are interested in the same topic, I recommend the site:

http://www.apple.com/education/hed/adc/exchange.html

I will post a “gallery” story on our use of Apple hardware for our MARS project in the coming weeks. With luck, I’ll be able to find a few more sites working with DSpace on this platform once that appears.

One other note on this topic. There are two really good sites devoted to enterprise computing on Apple. One that has a predominance of academic types on the board is MacEnterprise.org. The other (and I think richer) site is AFP548.com. Several of the AFP548 group gave presentations at this year’s WWDC which I thought were really well done. Another site with an enterprise focus (but limited to XServe RAID hardware) is alienraid.org

LibraryThing

      Comments Off on LibraryThing

Here’s a twist on social bookmarking…you go to the LibraryThing website and enter your book collection. Then others can see your collection and from that and collections of others, figure out what they want to read next.

http://www.librarything.com

Web-based data entry can take an ISBN and search LC and/or Amazon to grab the metadata about a particular book but it’s sort of slow.

Interesting idea…and for $10 you can get a lifetime account which gives unlimited title storage. If you just want to use the service for free, you’re limited to 200 titles.

When I last checked there were 45,000 titles in the database (not sure that they’re unique titles…pretty sure they’re not).

Port forwarding demystified

      1 Comment on Port forwarding demystified

When I finally got wireless broadband at my house a few months back, I rushed over to Staples and purchased a LinkSys Wireless Router (the WRT54GS) so I could share the connection with a couple of laptops and several other computers around the house.
wrt54gs Setup was web-based trivial and in no time everyone was IM’img, LimeWiring, e-mailing, Skyping, all at the same time… and my phone began to ring again (I had forgotten how effective a dialup internet connection can be at blocking telemarketers).

I also noticed that the NAT (Network Address Translation) protocol these devices use to “split” that single connection is a really great security tool, shielding your machines from worms, malicious port scans and other intrusion-ware.

How? The router creates a private network and assigns an IP address (typically something like 192.168.0.XXX) to every device on that “local” LAN (e.g., each computer in my house). When one of these machines sends a packet out for the internet, the router rewrites the packet’s header (substituting the router’s “real” IP address for the originating IP and makes a note of where on the local network it came from. When a return packet comes in for that machine, the router looks in the table, sees the entry and says “OK, I send this packet to the laptop upstairs.”

The security feature comes in when an “uninvited” packet arrives at the router. Not finding an entry in the table for this new packet (that is, it couldn’t determine that anyone on the local LAN asked for it), it just drops it.

Works great but some things don’t play well with a NAT router in the loop. Trying to run Apple Remote Desktop from outside the local LAN is a case in point. When my machine at work sends a packet to the router at my house on port 3283, the router drops it (since no machine inside the local LAN asked for it).

Solution? Enable what’s called “port forwarding.” It’s really nothing more than setting up a rule on the router so that when a packet arrives at the router’s IP address for a particular/specific port, it knows to “forward” that packet to a specific machine on the local network. With port forwarding in place, my ARD packet arrives at the router on port 3283 and the router “knows” to forward that packet on to port 3283 on my wife’s G5. Suddenly I’m able to take valuable time away from my highly-paid day job to be a pro-bono help desk monkey for members of my family. Isn’t technology great?

So, how do you set that up? It varies for each router and it may not be very well documented. Looking into this problem for two other routers I need to traverse for some consulting work, I found this site that lays it out very well for just about every router I’ve ever heard of…and several hundred more I never even knew existed. A really helpful resource:

http://www.portforward.com

New MARS look…

      Comments Off on New MARS look…

Thanks to Dorothea’s skill with a CSS chisel, we have a very new look for our MARS site. We’re now running release 1.3.1 with what I call the “Salo Effect” in place. The upgrade from 1.2.2 to 1.3.1 went very smoothly…of course, having a “staging server” in place where all this can be worked out before hand is extremely helpful.