Fri - December 26, 2008

Overdrive for Mac


I downloaded Overdrive's new console for mac.

It worked quite well. Let's hope our Overdrive circulation stats pick up now that MP3's are available. I think it's a big plus for all our iPod-owning patrons.

Posted at 04:46 PM     Read More  


Wed - October 29, 2008

Autodialer Script


This AppleScript GetCallList.applescript lives on our MacMini running PhoneHerald which calls our patrons about their holds. It merges the separate calling lists generated by the horizon receipt printer programs running on each circ station, weeds the duplicate patron barcodes, then it GUI scripts PhoneHerald to import the text file as a new group, and starts a new calling run with that list. I have a separate script for our branch library, which uses a different calling template, but this example should give you the gist of how it works.

The file provided here is the simple text version of the script. The real script is saved as an AppleScript, extension .scpt , and I use iCal to trigger it. We run two call jobs a day, one at 10 a.m., and another around 3:45 p.m.

Some notes:

Our file server is a Windows 2003 box.

The Mac Mini is a 1.66 GHz Intel Core Duo with 512MB of RAM running OS X 10.4.11.

The voice modem that comes with PhoneHerald is USB, and it dials out on an extra fax line that we have.

This machine is also used to run our Ruby on Rails apps: the pull list app, which sorts and formats our Horizon pull lists, and our ordering app that grabs info via Amazon. I've also set up the pull list app to sort and format our NA lists.

Posted at 03:48 PM     Read More  

Python Version of Horizon Receipt Printer App


This is the code for the new version of the receipt printer application horizon_receipt_printer.py .
If you've ever written code in both Visual Basic and Python, you'll know why I wrote it in Python. ;-)

I've also attached the various ini files it depends on: the routes.ini file routes.ini and the setup.ini file setup.ini .

Before you get going, I recommend that you install the VB version, because that will create all the basics for you, i.e., the Receipt Printer directory, and explain how to set up Horizon properly. This Python version takes the place of that program, and not as neatly as Dean designed the installer. So, when all's said and done, if you want to replace the VB version completely, you will need to delete the VB executable, and set the Python executable version to start up on login. You will also replace the default .ini files in the Receipt Printer directory with the .ini files above.

This new code was written in Python. To use it, you need to install Python and IronPython. Also, if you haven't gotten it already, you'll want to get at least the 2.0 release of the .Net Framework. I've written earlier about why I used IronPython, namely to use the file system watcher function, but other than that, the code is basic Python.

The work setup at the library is pretty good. We have a circ station in the back of the circ office, that we can use as the guinea pig. If the code works, then we compile an executable to copy to the other circ stations. The other stations need Python installed, but not IronPython. The executable also needs two DLL's that must reside in the same directory as the executable: IronMath.DLL and IronPython.DLL.

The only modifications I've made to the code available for download is to sanitize it, taking out phone numbers, web addresses, mail server names, etc. Just remember to add the correct information before compiling. If you want to be able to send receipts via email, you will need to have access to a mail server. If you don't want to generate a text file of patrons who need to be called, simply delete or comment out the relevant code. We use our list to feed our autodialer, which is PhoneHerald, running on a Mac Mini.

Once you install it, the IronPython directory has a number of useful things in it. Be sure to read the tutorial, which has a basic file system watcher example.

To compile an executable out of IronPython code, you will need to download the pyc sample zipped directory from this page. I keep the pyc.py file plus the two DLL's in the root of my IronPython folder, where the horizon_receipt_printer.py file is. When I'm all ready, I navigate to my IronPython folder within the command line, then execute this:

ipy.exe pyc.py /main:horizon_receipt_printer.py

You will have a new file, horizon_receipt_printer.exe, ready for distribution. Make sure it works on the machine where you created it before you start passing it out. Sometimes the permissions on the circ stations need to be tweaked.

If you have questions, feel free to email me: ckupec@me.com

Posted at 01:51 PM     Read More  


Wed - October 22, 2008

Back-to-back TV Commercials


Who's the adman who first came up with this double-barreled shotgun technique for TV advertising?

It involves two 15-second or two thirty second ads for the same sponsor, back-to-back. I wonder if it's analogous to the invention of the stadium wave. Many fathers. I do notice that McDonald's uses the method an awful lot. Does it work?

Posted at 02:12 PM     Read More  


Fri - September 26, 2008

So where is Overdrive's Mac-compatible Console?


I wish Overdrive would get a move on and release the Mac-compatible version of their Console application.

As it stands, if you want to get any Overdrive MP3's onto your iPod, it needs to be formatted for PC, and you have to use a PC to transfer them over. Another complaint, none of the MP3 titles are multiple-user. Until these problems are rectified, our download circs are going to remain like they have been, anemic. We are taking another look at MP3 CD's for our patrons. They're a hell of a lot cheaper than what Overdrive charges, and they give us better circ numbers. They can be returned in the same day, unlike the downloadable versions, with their draconian restrictions. Meanwhile, our consortium still is buying WMA versions of titles. Dumb, dumb, dumb. When the budget crunch comes, all this stuff is going to get cut, and we'll be stuck with nothing but a digital albatross.

Posted at 09:50 AM     Read More  


Mon - July 7, 2008

Ruby on Rails, Python, Lua


I've been teaching myself Ruby and Python, and a little Lua, mostly for fun, then I've been trying to apply it to what we do at the library.

RUBY
So far, I'm using Ruby on Rails to maintain our online statistics database, process our daily pull lists, and speed up and automate our selection/acquisitions system.

For our stats database, I quit using Excel, and switched to the RoR + mySQL method. I probably cut an hour off of my monthly stats collection by creating it. I hooked up Gruff, a Ruby gem which generates quick graphs, to use with it. It's simple and efficient. Visual display of quantitative information is the way to go. I use it to compare fiscal years as well as month to month. I like creating algorithms in Ruby and Python so much better than in anything Microsoft offers, i.e., Excel, VB. With macros, I never felt like I was in complete control.

The daily pull list database takes a downloaded text file we export from our ILS, and sorts and reformats it into separate PDF's for the various departments who hunt the items down. I actually have an off-shoot of this that I use with my iPhone. As I find the items, I tap on them, and remove them from my list, via Ajax. Unfortunately, there's no quick mechanism to update the item records in the ILS, so that has to be done item by item.

The consortium doesn't have an acquisitions module with its ILS, so each library fends for itself. Our historical record keeping still depends on FileMaker, but I've been able to move the data entry method over to Rails. It's pretty cool. I added a GreaseMonkey script to trigger the data grab from Amazon. I used to do the same thing with FileMaker and AppleScript, but once Amazon updated their AWS, I had to migrate it. It's actually better with Rails. The challenge now is to duplicate the acquisitions side of the FileMaker database, i.e., ordering, reception, accounting. Batch ordering via Amazon is pretty seamless. Exporting CSV files for Ingram and Baker & Taylor works alright, if you've got ISBN's. For AV materials, it's not so good. B&T doesn't have a method to batch import UPC codes yet, even though they allow one to search individually on UPC's.


PYTHON
I started learning Python after I watched the Google App Engine demo that's available online. The App Engine is kind of like what Heroku is doing with Ruby on Rails. With Google, it's Python plus Django. That setup didn't look as straight forward as RoR, but I did take a shine to Python itself. I looked around for something to do with it, and I decided to redo the consortium's Receipt Printer application, that was originally written in Visual Basic. The core function of the receipt printer script is the file system watcher. I surfed around looking for a python version of the watcher, and while I didn't find anything useful, I did come across IronPython. What's more, inside the IronPython tutorial is a quick file system watcher example. So I modified that, and retooled the rest of the printer script using pure Python as much as possible. The Python code looks so much cleaner and easier to understand. I like it a lot. I wish I didn't have to use the .Net stuff at all, but better than nothing. Plus IronPython is in Microsoft's stable, so it's got active support.

LUA
I wrote a quick Lua program to reformat an extremely long emailed report from the consortium we get once a month or so. Lua is extremely fast, almost C speed, so if you have need to zoom through megabytes of text, parsing, etc., check it out. It's a popular programming language for game add-ons, especially WoW.

Posted at 04:59 PM     Read More  


Wed - March 19, 2008

Receipt Printer App Email Capable


I've had a commented-out sub-routine in my library's receipt printer code that can email the receipt rather than print it for some time now. It required me to use Horizon's table editor to modify our receipt slip to include the patron email address. But now, with our push to go green and cut costs, I've done further testing on it, and it looks good to go.

The logic is pretty basic. If an email address exists for the patron, the program generates an email with the formatted data and sends it off piggy-backing on the consortium's mail server. No receipt gets printed. It looks like the 3M self-checkout stations we have do essentially the same thing, so I think it's kosher. The staff member at the circ desk gets feedback two ways: I added a "beep" line, and I write to the console window that the email was sent and where. What's really nice is that the emailed receipts are perfectly formatted for my iPhone. I didn't have to tweak anything.

If the mail gets sent, but the address is bad, we get the bounceback through our normal channels, which is great. I'm now just putting a little "try" loopback that will print out a receipt for email users only in the case that the mail server is unavailable. I think that patrons who sign up for email notification services will really like it. I'm just waiting for final approval from the consortium's mail server administrators.

Knowing this is possible, it was very disheartening to discover that there isn't yet any way to get isbns out. Horizon's kind of clunky when it comes to customizations like that. For now, I think the only bib record info that can come out to the checkout receipt is the title. It's too bad, because once the isbns can come out, a lot of nice apps could use that data, e.g., LibraryThing, Delicious Library, etc.

Posted at 09:27 AM     Read More  

Mostly good news from Overdrive


Overdrive sent out a PLA preview to its customers that says they will soon begin offering MP3 downloads as well as their usual DRM WMA fare. Also that they are going to provide a Mac version of their Console application to download those MP3s. The downside is that their titles from Random House will continue to be WMA, PC only, no-iPod garbage, which isn't their fault, but Random House's.

I think it's great that Overdrive is working to expand their range. Our consortium will probably lean heavily toward buying the MP3 titles, and shunning the WMA stuff, hearing the news. We're serving a niche market with the WMA's as it is. Once we can offer downloadable audio for folks with iPods, the floodgates are going to open for Overdrive. Good for them, and good for public libraries. Until Random House Audio opens up their model, I recommend that public libraries avoid buying their downloadable audio. Stick to buying their CDs and tapes.

Posted at 08:29 AM     Read More  


Fri - March 7, 2008

iPhone SDK released


Apple released their developer kit for iPhone yesterday. I watched the presentation off their website this morning. Yowza. That whole market is just gonna explode. I will be very surprised if Apple's iPhone doesn't end up dominating mobile. Even now, they're impressive.

It's interesting that Apple has made iPhone development only possible via a Mac running Leopard. Hell, I can't even use it! Gotta get Leopard. It was kind of like Vista with me. BFD. I was also happy to hear them to tout the Model-Controller-View philosophy. I'm all over that, having been messing with Ruby on Rails for the last few months.

For big companies, the news that Exchange Server will be accessible via iPhones must be good news. The demos that various companies showed were worth watching: EA Games, Epocrates, SalesForce.com, AOL. The premise of that game Spore from EA was funny. You start out as a paramecium, a slime mold, or something like that and work your way up. Kinda like you and me. Karma Heights. Available upgrades: spinal column, gills, opposable thumbs, massive Chess Club brain, etc. I don't know. I'm making most of that stuff up. I did see a spine in there though.

Anyhoo, the bottom line is that iPhones are probably going to do what everyone hoped PDA's and Blackberries would do. As I've said before, Apple gets it. Sure, they're like Microsoft, control freaks, yadda yadda, but unlike Microsoft, they get it. And that's why they're successful. What is it they get, you ask? Aesthetics, simplicity, logic, coolness. Something Microsoft can't buy. Even Microsoft's wanna-purchases are uncool. Yahoo? Come on.

So, what can libraries do with iPhones? Practically any report you run can be made paperless and mobile. Straight to PDF is the simplest, but for interaction, I've been toying with Ruby on Rails. Using Rails, you can omit items from your list once you've found them, tag problems, upload changes back to the ILS. Talking to the ILS is the biggest problem.

I've been working on a method to run our pull lists, so that a staff member using an iPhone can do it all, eliminating the need for a paper copy. We still need to generate the list within Horizon, then export that text file. From there, it's uploaded to a Rails app that slices and dices the report for us. If I could get the last activity date info out from the ILS, then we could give up printing it entirely. I'm envisioning that this pull list formatter/archiver could reside at the central site, and all agencies within our consortium would use it.

I have an iPhone library success story of my own: I was working the reference desk, and a patron needed to make some color copies, which we don't offer. So, I told him about Staples, FedEx/Kinko's, etc. I was about to look up the location of a Kinko's on the web for him, when it dawned on me that I had my iPhone. I went to Google Maps, searched on Kinkos, and it displayed all the locations in my area. I tapped on the pin closest to my location, and up popped the phone number, URL, etc. of that location. I tapped the phone number, and when their answering machine told me they were closed, I was able to tell the patron to save himself a trip. Not as cool as searching for all the Thai restaurants in my area, but still. I was impressed. The patron was too.

If you're a reference librarian or a systems librarian, I would recommend getting an iPhone.

Posted at 01:14 PM     Read More  


Wed - February 27, 2008

Random House Giving Up DRM


Now that Random House is going to sell their digital audiobooks DRM-free to all vendors, I can only hope that Overdrive and Audible open up their systems. Once Audible becomes a full-fledged part of Amazon, I think they'll change their ways, but Overdrive? They're probably too beholden to the Microsoft DRM mess to retool. If they don't retool, I hope they wither and die, frankly. The only thing Overdrive offers libraries is a legal way to check out digital audio. We don't own the files, can't take them anywhere else...who needs that?

What libraries need is a stand alone mechanism that can store files and serve them up via some kind of SIP authentication, integrated somehow with the ILS. Any vendors doing that? I could probably tool something together using Ruby on Rails, but the ol' ILS in and out, my droogies, there's the rub.

Plan B:

Instead of Playaways, which we have been buying, we could just get a couple of eMusic accounts, each account allowing two monthly audiobook downloads for $19.99 a month, and buy some cheap mp3 players that have displays, and circ those. If the iPod shuffle only had a display. The price is right: $49. Those would take care of the folks who don't have computers or their own players, then we could allow the technophiles come in and download onto their own devices. We could even burn the files to MP3 CD for circulation. Still not the optimal solution, but better and cheaper than what we give them now: Playaways, Books on CD, and Overdrive. Blech.

Link to the Random House Story on Boing Boing

Posted at 08:41 AM     Read More  


Fri - November 9, 2007

Guitar Hero Episode on South Park


This week's episode poked fun at the Guitar Hero phenomenon.

I really enjoyed when Stan's dad whips out his guitar and starts playing Kansas' "Wayward Son", telling the boys, "see, I can play it on a real guitar!", and the boys aren't impressed at all. That's my house. Only my youngest son contemplates (can you contemplate something when you're only six?) stepping up to a real guitar. He's already halfway there. He's got attitude: "When I have my own band, I'm gonna rock!"

We just got Guitar Hero III : Legends of Rock, which actually is Guitar Hero IV, if you include Guitar Hero Encore: Rocks the 80s. It came with a wireless controller/guitar that looks like a Stratocaster, which is sort of interesting, since Gibson must have paid for exclusive rights to be the only guitar maker in the game.

Some of the songs are ancient, which is funny. "Sunshine of Your Love", "Paint It Black", "Black Magic Woman"? Those songs were old when I was a kid. Plus it has what must be the requisite Sabbath and ZZ Top songs. Like all the games in the series, the final set of songs sucks. "Devil Went Down To Georgia"? WTF?

Posted at 12:48 PM     Read More  


Tue - October 2, 2007

I Love Lucy, The Daughter of the Devil


What's good on TV? My vote is for Lucy, the Daughter of the Devil.

This show is on Cartoon Network's Adult Swim. It's a fifteen minute mini-show, so minus the commercials, it's probably ten minutes max. The basic premise is that Lucy is a typical teenage girl, dating someone her father doesn't approve of, etc. Plus she's the Anti-Christ. Hilarity ensues. It's on Sunday nights.

A couple of mentions:

Loren Bouchard, the creator, who worked on Dr. Katz, was also responsible, along with Brendon Small, for Home Movies. Here's an interview with him. He and the interviewer talk about Animal Collective in there coincidentally. Plus he mentions the "Jealous Guy" cover by Donnie Hathaway, who sounds like Stevie Wonder, which you can find on Soul Sides : Volume One. Place a hold today! Ein kleine Welt, mein Freund.

H. Jon Benjamin provides the voice of the devil, among other characters on the show. He is a very talented voice actor/comedian, who hails from Worcester, Massachusetts. He has done the voice of Dr. Katz' son, as well as Jason and Coach McGuirk on Home Movies. He gets around. I just heard his voice in a Family Guy episode too.

Highly recommended. The pilot can be found on YouTube: Lucy Daughter of the Devil, while additional episodes can be purchased on iTunes.

Posted at 11:11 AM     Read More  


Thu - September 27, 2007

DRM must die


With Amazon debuting their beta MP3 download site, the time has come for libraries to really start thinking about the future of digital.

I gave it a whirl yesterday. Amazon's selection isn't the best, and their classification scheme is weak, but the purchase and transfer parts of the deal worked pretty well. And that's on a mac, folks. The files were imported without a hitch into my iTunes library. There is a small program Amazon has you download to facilitate the transfer into your music library, but that wasn't painful like Overdrive's system is. Bring on the price wars!

Finally, cheap, easy to download DRM-free MP3s. eMusic is another website offering up DRM free files. What's more, they have audiobooks available. So, how will libraries get into the act? Will we buy the files, burn a disc, and then circ the disc? What about circulating iPod fatties? What are we going to do? Is there anything we can do that doesn't break the law?

If we put the material on devices, and circulate the devices, why is that considered different from a library buying a book and circulating it? If the worry is that we might put the same title on two devices at the same time, why can't we pay a simple licensing fee to do that sort of thing? Why does DRM have to be involved?

Having said DRM must die, maybe I should qualify that. The way it works now sucks. Maybe we should revisit the idea of DRM working something like PGP. The product is unfettered. Perhaps we could circulate it, with our own key pair, based on patron barcode and PIN, as opposed to a platform-dependent, software-dependent, model. I know that it's been thought about, but I can't say what the problems with that model are. Or how about a simple DRM, that opens up with the PGP, and shuts down three weeks later. It registers renewals on the library server. The server keeps tabs on residuals, and we pay the publishers that. One price to purchase the title, a lower price to renew, since that's no sweat off the publisher's back at all. We need to create an open source, secure, cross-platform compliant, transaction method that doesn't line anyone's pockets, or tie us into a single vendor.

Posted at 01:26 PM     Read More  

Big Doings in the Wacky World of Warcraft


Blizzard Entertainment just released a new patch to its wildly popular MMPORG, World of Warcraft. The two big things are voice chat and movie recording.

I've bought a few machinima books for the library, and having seen the work of folks out on YouTube who've made machinima via WoW, I can see its appeal. So this update, that will allow players to record their play within the game seems to address that popularity. I haven't tried it out yet, but I might try my hand at it, and pop a short demo here. I think my kids might run with it.

Voice chat, the other new thing, isn't actually running yet. My oldest son is all fired up, because voice chat is really useful when running instances, and he was actually trying to get me to shell out for a Ventrio account. If you've ever seen the "Make Love, Not Warcraft" episode of South Park (Season 10), you might understand what I'm talking about. Wow as a standalone application doesn't have, or at least it didn't use to have, voice chat. It was all text chat. Voice chat, in the form that Cartman, Kyle, Stan, and Kenny are using, works outside of Blizzard's software, via voice chat servers. Ventrio is one of these companies that offers voice chat. So, seeing this the next day as a free upgrade was a godsend. What's it gonna be like? I don't know. One thought I did have is that it would be harder to disguise your gender, plus it would be obvious to other players when I'm playing a character versus my son playing the same character. Stay tuned.

And then on top of all that, there's another expansion coming this fall, the Wrath of the Lich King. I guess it will be the size of the Burning Crusade expansion, i.e., it'll raise the top level to 80, throw in a few new areas, new quests, new classes or races maybe. The boys are psyched.

Which brings me to the topic of gaming and reading. My two older sons read a lot about their games. Not just cheats, walkthroughs, but the storyline stuff. I find it rather amusing. They will talk about characters in their games as if they really existed. Everything gets kinda blurry. But it's good to see them reading, huh?

Posted at 01:01 PM     Read More  


Fri - May 11, 2007

Making the receipt printer program better


Our head of circulation came back from the regional library delivery meeting with the news that we might be changing our routing codes. She asked me whether it would be a problem for our receipt printer program. I told her that I'd mess around with it and give her a reply. So, I've been working on taking the location specific code, i.e., library names, routing codes, exceptions, etc. out of the receipt printer program, and making them external ini files that can be changed without recompiling the source.

I banged out a rough version to send to Dean for the once over, and it made the cut, then I just got off the phone with Michele who has modified the code for NOBLE. I asked her to send me some samples of the text files that their ILS spits out, specifically the In Transit slips. I want to integrate her work into one program "to rule them all". A grand unified program for our regional delivery system. Alles klar, Herr Kommissar? Schmeckt gut!

What I've done is make three new ini files: routing_codes.ini, exceptions.ini, and main_locations.ini to take care of the problem. If an agency string isn't found in the routing codes, the program looks in the exceptions "table", which tells if the exception is a branch or a alternate spelling/name, then gets the appropriate routing code. With the routing code known, it then goes back to the main locations table to get the name for the route location.

The folks that sort for the region don't need to worry about the subdivisions of the individual libraries, so I continued to keep the main location name and routing number prominent, but for the benefit of "in-house" sorting, e.g., when the staff at Chelmsford's main library sort the items going to their branch, I emphasized the word "branch". I still have the original name printed on the slip, but lower down.

Once Michele shows me what her slip input looks like, and we get that system's routing handled, we'll be able to put a line for consortium name in the setup.ini, and use a single program for both consortia. And then it might be usable on any Horizon or III system. It might be worth setting up a source forge collaboration for the future, if it pans out.

Posted at 03:50 PM     Read More  
Moving Autodialer Over to an Intel Mac Mini
Computers in Libraries 2007
Genetic Line of Succession
Apple and EMI announce DRM-free downloads
The Daedalus Project
Yes, it IS a popularity contest!
Computers in Libraries 2007 & WoW
Free Publicity!
Yahoo! Message Boards
Boston Overreacts to ATHF ads
LPT1, COM1, HIHRD1
Pull List Workflow
Calling Patron Holds on the Cheap
Advanced Receipt Printing Solutions for Horizon 7.3
Use iTunes Store Info to Search Your Public Library's Catalog


©