Migrating to bootstrap 5

LibGuides seems to have finally begun its long journey to Bootstrap 5. In the abstract, this is really good news. New features! Modern tools! No longer having to worry about Bootstrap 3 being EOL! All good stuff.

But in practice, I think this might ultimately mean a lot of work for our library. Our library homepage is a heavily-bootstrapped group homepage. I expect that a lot would break if we simply flipped the switch to Bootstrap 5. The official list of breaking changes is daunting (and this list only covers the 4 to 5 part of the migration!).

Also, the migration timelines are still unclear to me. So far, Springshare has only launched Bootstrap 5 for the A-to-Z lists. I asked about subsequent timelines on the Springshare Lounge earlier this afternoon, but it’s the day before Thanksgiving, and I assume many people are (quite rightly) busy with the non-Bootstrap parts of the holiday.

My thought is to pitch this whole situation to my co-workers as a chance to do a redesign. If lots of things are breaking anyway, why not make it better? I bet we can come up with some constructive, iterative ideas for improvements.

Posted in bootstrap, homepage, libguides | Leave a comment

Research and sordid calculations about promotion

I’m up for promotion this year, and it’s too late to try to get any more research papers published before my file gets reviewed by the promotion committee. So a few days ago I made the very pragmatic/mercenary decision to not start any new research projects right now. Instead, I’ll focus on committee work, which can still plausibly move the needle on my promotion application. Research can wait.

But then I woke up on Sunday morning super depressed about this decision. It feels very un-motivating to not be working on a paper. I find the research to be one of the most rewarding parts of academic librarianship, and I don’t really want to give that up, even if it isn’t really expedient right now.

Which is to say my research hiatus might be over after just a few days. I have some stuff I want to work on.

Posted in research | Leave a comment


I’m trying something new: cross-posting from Gemini. I don’t foresee doing this very often. It’s a bit of an experiment.

So I had been using AV-98 by solderpunk as a gemini client, which was last updated 3 years ago according to the repository on tildegit. Anyhow, the recent lack of maintenance has been catching up with it, as there are an increasing number of problems with the client with each successive Python release.

But I don’t want to dwell on AV-98; it was a fine client while it lasted, but it was time to move on. Since I did like AV-98, I was drawn to offpunk, which is a fork. It’s also actively maintained (the most recent update was last week). Offpunk has a lot more features than AV-98, which is kindof fun. I like the idea of offline reading (what if I’m on a plane?), and it’s cool to read other formats, from web to rss and so on.

Offpunk is also pleasingly janky[1]. As in it is a project that I could see myself contribuing to. It’s certainly not perfect but I can plausibly see opportunities to submit patches and issues. Plus it’s written in Python, which makes me happy.

So lots of new stuff to explore here. Happy to have the opportunity for further tinkering in gemini.

[1] EDIT – The janky problems turned out to be a result of my Python setup, not Offpunk’s fault at all! My apologies to Ploum! :)

Posted in gemini, smol | Leave a comment

Status page

Over the past two weeks, I put together a “status page” for our library services. It’s not live yet, but I hope to make it public soon. Basically the page gathers HTTP response codes by submitting GET requests for each of our outside services (website, collections, and other services like ILLiad, Primo, and EZproxy), and displays them to the user, helpfully color-coded to show which ones have failed.

The point is that librarians and other users – on our campus and elsewhere – can see what is working and what is not. The use case may be as straightforward as asking “is the website down?”, or perhaps may be more complicated, such as debugging eresource access problems.

One interesting thing that I learned is that a lot of our services return 3xx series responses, which are redirects. I’m not sure why this is yet. Perhaps our vendors just move their pages around a lot. Or maybe the URLs we have stored in our CMS are just particularly old. In any case it is curious and I intend to investigate further. I have set Python’s httpx library to dig a bit deeper and follow redirects to see where they lead. One hopes they ultimately lead to a 2xx, but it is clear that sometimes they don’t :(

I also had to spoof some headers to avoid unwarranted 4xx series responses. Some vendors were returning 403s if it was clear that it wasn’t a browser making the request. So I used a Firefox user-agent header and, for the most part, got more reliable responses. Some vendors continue to give 403s nonetheless. I wonder what it is about my GET request that is causing them to continue to return “Forbidden”. I will puzzle over this some more. Once I get the whole thing in decent shape, I will share it with the CUNY eresources librarians.

Posted in http status, maintenance, networking | Leave a comment

The thanksgiving challenge, revisited

In 2021, I posted about how I was planning to stay home by myself for the Thanksgiving weekend and work on writing code for my Open Journal Matcher project. I then went on about how great it was. So this year I’m going to do the Thanksgiving programming challenge again. The premise is simple: stay by yourself and code all weekend. It is okay to have your dog (or other pet of your choosing) with you. Stay up late if that helps. Coffee or tea is optional but encouraged.

Some things I might try:

  • Migrate our Springshare A-to-Z page to Bootstrap 5
  • Build a status page for all of our various library services
  • Improve our public-facing Primo landing page

If anyone else is in for the challenge, let me know. Post your progress, encouragements, or visible signs of distress to Mastodon. We’re going to write a shit ton of code!

Posted in holidays | 1 Response

Ubuntu on an 2012 macbook pro

The cheap Chromebook I bought last year is starting to flake out. The keyboard is becoming less responsive; the left shift key has become particularly troublesome. I’m realizing that you can only expect so much mileage out of a $300 machine. It has been my daily driver for a year, so I think it has held up remarkably, all things considered.

I’m realizing that I need a backup machine though. I’m still not willing to buy a fancy new laptop, so I’m trying to make do with what I have. What I have is a 2012 MacBook Pro that has been sitting in a box under the bed for several years. This may not sound that appealing, and indeed you are right: running MacOS it is entirely unusable. But I put Ubuntu 22.04 on it, in an attempt to salvage some more useful years out of the hardware.

So far so good. The Ubuntu minimal install that I started with was a mistake (too minimal), so I reinstalled with the normal Ubuntu installation. I had to install some drivers to get the wireless working, but now it is a usable machine. I hope to report back once I’ve spent some time with it and can give a better assessment of how useful this setup is.

Posted in chromebook, linux, macbook, ubuntu | Leave a comment


Despite doing a lot of writing over the past few years, I’m definitely not a well-seasoned editor. If I’m being honest with myself, I’m not critical enough: I’m too willing to say “yes, this is fine.” But with some texts, strong criticism is definitely needed. I also sometimes feel that my edits are too superficial, and sometimes don’t adequately address the structural problems of a text.

But I do like editing. On the editorial board for Code4Lib Journal, I really appreciate reading the papers and watching them come together through rounds of revisions and input from editors. Editing technical topics poses unique challenges, because we are all sometimes confronted with the limits of our own technical knowledge. But it is valuable work, because we’re helping to produce something that hopefully benefits the Code4Lib community and beyond.

I also feel that editing is very much a learnable skill. Even in the brief time I’ve been on the editorial board, I think my editing abilities have come a long way. Granted I was starting from a low base. Nonetheless, watching the other editors has been very instructive. I hope to stick at this until I get much better at it. It’s probably a good skill to work on.

Posted in code4lib, editing | Leave a comment

AR, part 3

Over on the Springshare Lounge, I was asked for some detail about how our new augmented reality game works, so I posted the text below. I thought it might also be useful to share this here…

This [AR game] was built on a new Group Homepage, starting with a completely empty Homepage Template. Starting with an empty group homepage gives you a blank slate for custom HTML and JS/CSS. With this starting point, you have a lot of flexibility to build what you want.

Nonetheless, there are limitations [with LibGuides]: the “Upload Customization Files” section of the Look & Feel section only allows certain file types, and files under a certain size. I bumped up against these limitations more than once, and it did limit what we could do to a certain extent.

The AR functionality comes from a JavaScript library called AR.js. This library is a bit rough around the edges, and not entirely robust, but we never hit any insurmountable roadblocks when trying to deploy it, so we just kept going. AR.js is meant to be used with a framework called AFRAME, which was not my first choice, but which turned out to be pretty usable. The AFRAME code is what handles the game logic.

The virtual shapes in the library space are triggered by markers, which are posters with patterns on them that we put up around the library, rather than geotagging. The good news is that this meant that once the game was loaded, it could be played without a wifi or cell signal. The bad news was that people kept taking down our posters without asking :(

In the end there were two hard parts: First, getting the HTML menu, welcome screen and congratulations screen to align properly in the viewport of the phone was not easy. It was especially problematic since the image produced by the camera was not usually the size of the screen. If I’m diagnosing this correctly, AR.js was manipulating the image behind the scenes, which made it hard to write the correct CSS. In the end it was a classic finicky CSS problem, and it just took a lot of banging my head against the problem to get it to work.

The other big problem is that modern phones have more than one camera. They even usually have more than one outward facing camera. The problem is that the AR.js library does not always pick the correct camera, making it unusable in a small percentage of cases. Reading the relevant GitHub issues on this showed me that this is something the makers of the AR.js library haven’t even solved, so my odds of solving it are extremely low. Despite this flaw, the game works on over 90% of the phones we have tried, so we decided to proceed with using it as a new student orientation activity nonetheless. When a student’s phone didn’t work, we had them partner with another student who had a working phone.

Anyhow, I hope this brief write-up helps. Let me know if you have any more specific questions!

Posted in ar, libguides | Leave a comment

AR, part 2

This was the first week of the fall semester, so our augmented reality (AR) game went live to students for the first time. Prof. Carrie Jedlicka did a ton of work to make this happen. The game worked on more phones than I thought it would (>90%?), which was a nice surprise. The students seemed to like it too, calling it “fun” and “cool” and such. They also got rice krispie squares for completing the game, which they liked.

The game is built on LibGuides, so I also posted about it to the Springshare Lounge, and the random librarian denizens there were all pretty positive about it as well. It’s nice that people are so supportive of what could be seen as such a frivolous project. But it’s fun to make shiny, sparkly things sometimes, and I’m glad people are getting behind it. There’s talk in my department about expanding the game into instruction.

The code is on GitHub. Hopefully this project can continue, because the rice krispie squares were a big hit :)

Posted in ar | Leave a comment


I’ve set up an account on tildegit to mirror some of our library’s most important GitHub repos. On the one hand, this is simply a backup: another way to get at our code should something go particularly awry.

On the other hand, this may point to a new direction for our library. I have been unimpressed with the direction that Microsoft has taken GitHub since they acquired it in 2018. The tildeverse offers an alternative. Tilde servers are smolweb communities that provide services like git, irc, bookwyrm, mastodon, gemini, and many other such services, to relatively small communities of users.

The downside to tildegit is that there is a higher barrier to entry than with something like GitHub or GitLab. You need to have an email address on a known tilde server, which most people definitely do not have, to create an account on tildegit. This really limits the ability of most people to open a pull request or an issue. But I have decided that this is not really a problem for me, because I very rarely get pull requests or issues anyway.

Right now my tildegit repos are all mirrors of corresponding GitHub repos. But maybe someday I will swap it around, so that tildegit is pushing the changes, and GitHub is mirroring. We will see.

Posted in git, smol, tilde | Leave a comment
  • Subscribe to this blog

Skip to toolbar