It’s now been a couple of years that I’ve been running Ubuntu as my daily driver. I had been on MacOS, but my MacBook was very old, and I was swayed by Dell’s XPS series laptops that came with Ubuntu preinstalled. As a newcomer to Linux, not having to install the OS myself was a major selling point.

I’ve now been through several reinstalls of Ubuntu (most recently 20.10), and have lost most of my fear of installing from scratch. In fact, it’s now one of the things I like most about Linux: if I’m unhappy with how things are going, I can always start again with a fresh install.

Moving from MacOS to Ubuntu was really a matter of trading one set of problems for a different set of problems. But I prefer the problems on Ubuntu. With a bit of work they are almost always resolvable to my satisfaction. It is very satisfying to be able to fix things yourself.

Posted in linux, ubuntu | Comments closed

Bootstrap and LibGuides

What is Bootstrap, and what can it do for my LibGuides?

Bootstrap is the framework that underpins LibGuides, and you’ll find it gives you much more control over how your LibGuides work. Bootstrap provides a collection of CSS and JavaScript components that will help you build responsive web pages. Gaining an understanding of how Bootstrap works will let you supercharge your guides.

With some understanding of the technical details, Bootstrap will open many possibilities for your guides. Knowledge of Bootstrap transforms LibGuides from a relatively restricted set of pre-built components into a much more flexible web framework. In short, Bootstrap makes it possible to do a lot more with LibGuides.

Posted in bootstrap, libguides | Comments closed

LibGuides (part 2)

At the outset, it is possible to overlook features of LibGuides CMS such as groups and their accompanying permissions. But groups can be useful, since they can describe organizational realities, so you may find that they’re helpful to you at some point in your LibGuides journey.

For us, LibGuides was a powerful tool to organize web work within the library, after it had long been managed elsewhere on campus. Bringing workflows back into the library accentuated the need for more fine-grained permissioning in our tools.

Likewise, managing JavaScript and CSS in a more hierarchical, group-defined way with LibGuides allowed us to tackle technical debt.

Which is to say that it is worth thinking about groups and permissions in LibGuides, as they can be helpful in the long run.

Posted in libguides | Comments closed


A couple of years ago, I started building a Sushi client. Sushi is a protocol for accessing standardized usage reports from our vendors. These reports, called Counter reports, quantitatively describe the usage of our electronic collections. I needed a client because at the time we didn’t have any automated way to gather these reports.

It seemed like a good idea. But there have been problems. Specifically:

  • The transition from Counter 4 to Counter 5 has meant that I’ve had to maintain separate code for both versions.
  • Vendors don’t have much incentive to make their Sushi implementations usable, so the interfaces are often difficult to work with.
  • I usually only need Counter reports about twice a year, so that the unfamiliarity of this project annoyed me each time I came back to it. I was always having to relearn what I had figured out 6 months ago.

There have been some improvements, too. Counter 5 supports JSON, so there’s no need to work with XML, which is really nice. Plus, almost all vendors have Counter 5 service now, so I’m dropping support for Counter 4 from my client.

I’m not sure how long I’ll continue to maintain this project. Alma, our new LSP, has Sushi functionality built in. I haven’t tried Alma’s implementation, but it is quite likely better than my scripts. And I wouldn’t have to maintain it! Sounds pretty good…

Posted in counter, sushi | Comments closed

Reaching in

I am a fan of technologies that you can reach into. I mean this metaphorically, of course. I like computing tools that you can tinker with and make your own. Usually – although not always – these are openly licensed, and usually they deliberately have these affordances.

As an occasional teacher of technical workshops, I encourage learners to roll up their sleeves and reach into their technologies as much as they want. Ideally, we can do this insofar as our comfort level, interest level, and our available free time allow. There is a satisfaction to breaking and fixing things. Exploring our technologies as far as we see fit is a great way to learn, and our libraries benefit when we bring back knowledge to share.

Posted in learning | Comments closed

Costs of development

Developing a project, even a small one, can be expensive. From when I started working on the Open Journal Matcher in earnest (in January) to when it was more or less complete in its current form (in the beginning of October), I probably spent about $1000 of my grant money. To me, this is a lot of money. It is definitely more than I would have been willing to spend personally. Needless to say, I am grateful for the funding.

The OJM is never going to be self-sufficient. It exists to help others; but unfortunately keeping it online is not free. Ultimately, I think it can be very cheap over the long term, so as to be sustainable. But the upfront development costs were considerable, from the perspective of my limited pocketbook. I think it needs to be pointed out that this kind of monetary hurdle prevents many worthy and interesting projects from ever being realized.

Posted in funding, journal recommender | Comments closed

Into the strangeness

There’s a lot of strangeness writing JavaScript for the web. The edge cases are sometimes mind-bending. This is sometimes not the fault of JavaScript itself, but can be due to the other, non-JS things that the browser is doing.

I ran into such problems recently when modifying a widget that provides access to our library’s discovery service, OneSearch. I wanted the widget to open OneSearch in a new tab (shouldn’t be a big deal, right?), but oh boy did that open a can of worms.

The variety of behaviors that I got from different users of the widget was stunning. Sometimes it would open one tab, sometimes two, sometimes three tabs. Sometimes it would get caught by a pop-up blocker, sometimes not. I couldn’t pin the behavior down to any specific browser type, browser version, or OS. Some of my fixes worked for some users, but not for others.

I won’t go into the gory details, but I did solve the problem. Unfortunately, this was not by fully understanding what JavaScript and the browser were doing, but by walking back the changes I had made to my code until I located the problem, and then adjusting from there.

I remain in awe of the strangeness of JavaScript, and I walk carefully, fearfully, in its presence.

Posted in javascript | Comments closed


These days, I’m really working hard at improving the library’s web presence. In part, this means moving more content over to LibGuides. As a result, we’re using more of the features of LibGuides, specifically lots of custom JavaScript and CSS. It’s nice to be tapping some of these more advanced features, and it has been nice to discover that, so far, they work pretty well.

For example, I was initially a bit miffed that the custom JS/CSS for a guide was capped at 2000 characters, but it turns out that’s really not a big deal, because you can also put your JS/CSS files in a LibGuides S3 bucket and load them at your convenience.

To push the envelope a little bit, I made a JavaScript-based calendar, using this library, and LibGuides handled it pretty flawlessly. At one point, I accidentally killed all of the JS in the guide editor page by failing to close a style tag, but other than that I have had no problems. While the organization of code in LibGuides is not always super intuitive – it can often live in multiple spots – it works as advertised.

All in all, pretty satisfying as a CMS so far.

Posted in javascript, libguides | Comments closed

Nanogenmo 2020

November is Nanogenmo, or National Novel Generation Month, a cheeky variant on the more well known Nanowrimo, or National Novel Writing Month. The idea is that during the month of November, you write code that produces a 50,000 word novel.

Most of the “novels” produced are of course unreadable. But it’s a great opportunity to play with natural language processing tools, and to try to produce something that is at least interesting or amusing. The challenge has been run annually since 2013, and there have been some really remarkable entries.

My contribution this year consists of driving directions from Google Maps, where the itinerary follows the mentions of U.S. place names from Mark Twain novels. The idea is that you can follow the fictional travels of Twain’s characters, while mostly sticking to today’s U.S. interstate system. Tedious to read, but a somewhat unusual way to experience Mark Twain.

I invite you to take a look at the many oddities from past Nanogenmos!

Posted in books, nanogenmo | Comments closed

Website committee

I was recently appointed chair of our library’s website committee. I am honored to take on this role, as I feel that working to improve our library’s web presence is one of the most useful contributions that I can make to our library. It is also work that I like doing. I can see how many people would find fixing code and solving minor problems with software very tedious or annoying, but I find it enjoyable.

I have some plans: reduce the overall number of pages, update or remove out-of-date content, move more pages over to LibGuides, improve the CSS in many places, and so on. I am glad that many of the other librarians on the committee are on board with these plans. I hope that we will be able to make some constructive improvements.

Anyhow, now it’s time to get to work on this. I will report back later.

Posted in committees | Comments closed
Need help with the Commons? Visit our
help page
Send us a message
Skip to toolbar